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 @   坞中客  阅读(140)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示