Ray 射线

射线的组成

发射点:世界坐标
发射的方向:一个向量
常用于处理碰撞业务,检测前方是否有东西。
射线碰撞检测前提:游戏物体必须有碰撞或触发器,可以没有刚体。
射线在和游戏物体发生碰撞后就会销毁,在当前帧过完后也是会自动销毁。

private void Update() {
    // 生成一条射线
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    // 临时存储数据的变量
    RaycastHit hit;
    // 返回当前射线是否有碰撞,并且返回当前碰撞的游戏物体的碰撞信息hint
    if (Physics.Raycast(ray, out hit)) {
        // 输出当前碰撞的游戏物体的信息
        Debug.LogError(hit.collider.gameObject);
    }
}

射线与指定层级发生碰撞

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
// 只能和第九层的游戏物体发生碰撞检测
Physics.Raycast(ray, out hit, 100, 1 << 9);
// 表示射线除了第九层外的游戏物体都触发碰撞检测。
Physics.Raycast(ray, out hit, 100, ~(1 << 9));

射线碰撞层级只能通过位运算进行表示

绘制射线

Debug.DrawRay(ray.origin, ray.direction * 10000, Color.red, 1);

通过Debug进行绘制一条射线,仅用于调试使用,游戏视图不可见

获取射线穿过的所有的游戏物体

RaycastHit [] hits = Physics.RaycastAll(ray);

posted @ 2022-10-28 18:32  坞中客  阅读(144)  评论(0)    收藏  举报