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);
本文来自博客园,作者:坞中客,转载请注明原文链接:https://www.cnblogs.com/wuzhongke/p/16837059.html
分类:
Unity-技术小白的进阶之路
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)