网站建设策划书封面,义乌seo,怎么做定制软件开发,医疗app开发需要多少费用文章目录 1. 定义2. 重要类和方法2.1 Ray2.2 从屏幕发出射线#xff1a;2.3 Raycast2.4 RaycastAll2.5 RaycastHit 碰撞信息2.6 layerMask 让射线检测只检测指定层级的对象 1. 定义
在Unity中#xff0c;射线检测#xff08;Raycasting#xff09;是一种常用的技术#x… 文章目录 1. 定义2. 重要类和方法2.1 Ray2.2 从屏幕发出射线2.3 Raycast2.4 RaycastAll2.5 RaycastHit 碰撞信息2.6 layerMask 让射线检测只检测指定层级的对象 1. 定义
在Unity中射线检测Raycasting是一种常用的技术用于检测射线是否与场景中的物体相交。这在游戏开发中用于实现点击物体、射线武器的碰撞检测、角色与环境的交互等方面非常有用。
2. 重要类和方法
2.1 Ray
定义表示从一个点沿着特定方向延伸的虚拟线段 属性
direction 射线的方向。origin 射线的原点。
构造函数
public Ray (Vector3 origin, Vector3 direction);在场景中绘制射线(仅在 Debug 下可见) // 创建射线
Ray ray new Ray(Vector3.zero, Vector3.forward);// 在场景中绘制射线可选操作仅用于调试目的
Debug.DrawRay(ray.origin, ray0.direction * 10f, Color.red);2.2 从屏幕发出射线
Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);
void Update()
{if (Input.GetMouseButton(0)) {Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);Debug.DrawRay(ray.origin, ray.direction * 10f, Color.red);}}2.3 Raycast
定义射线检测获取相交的单个物体它可以检测射线是否与某个物体相交如果相交还可以获取有关交点的信息 bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance, int layerMask); 参数含义 Ray——射线对象 RaycastHit——碰撞相交对象信息 maxDistance——射线检测的最大距离 layerMask——层蒙版用于只检测特定层对象 返回值含义 bool——当射线和物体相交时返回true void Update()
{if (Input.GetMouseButtonDown(0)) {Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hitInfo;if (Physics.Raycast(ray, out hitInfo)){// 射线与物体相交Debug.Log($Name{hitInfo.collider.name}Point{hitInfo.point});}}
}2.4 RaycastAll
定义射线检测获取相交的多个物体 RaycastHit[] RaycastAll(Ray ray, float maxDistance, int layerMask); RaycastHit[]——当射线和物体相交时返回相交的物体们如果没有碰撞到数组长度为0
void Update()
{if (Input.GetMouseButtonDown(0)) {Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit[] hitInfos;hitInfos Physics.RaycastAll(ray, int.MaxValue);// 射线与物体相交foreach (var item in hitInfos){Debug.Log($Name{item.collider.name}Point{item.point});} }
}2.5 RaycastHit 碰撞信息 2.6 layerMask 让射线检测只检测指定层级的对象
LayerMask.NameToLayer(层名)根据层名字转换为层编号的方法 层编号 1 LayerMask.NameToLayer(“Cube”)
void Update()
{if (Input.GetMouseButtonDown(0)) {Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hitInfo;// 1 LayerMask.NameToLayer(Cube) 将 1 左移得到的层级编号位数得到层级编号的二进制if (Physics.Raycast(ray, out hitInfo, int.MaxValue, 1 LayerMask.NameToLayer(Cube))){// 射线与物体相交Debug.Log($Name{hitInfo.collider.name}Point{hitInfo.point});}}
}