射线 Unity提供的射线机制:通过虚拟射线检测所碰撞的物体 创建射线:
Ray ray =new Ray(); bool Raycast(Ray ray,out RaycastHit hitInfo);Demo:从射线机到鼠标点击处创建一个射线 Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition); ScreenPointToRay()方法返回一条从摄像机发出,穿透屏幕上某个点的射线; Input.mousePosition鼠标当前坐标,某个点=鼠标当前坐标 可以这样设置:鼠标点击右键,摄像机就发出一条射线通过鼠标当前的屏幕位置
if(Input.GetMouseButtonDown(1)) { Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition); }从射线中存储射线信息的结构体为RaycastHit ; 使用Physics.Raycast(Ray ray,RaycastHit rayinfo);来读取射线的信息 所以鼠标点击右键,摄像机发出射线,通过鼠标当前屏幕坐标,读取该射线信息。
if (Input.GetMouseButtonDown(1)) { Ray myRay =Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; Physics.Raycast(myRay, out hit) }存储的信息含有所点击当前点在三维坐标中position信息,而不是屏幕坐标的position,最后在设置要移动物体的position就可以了。
if (Input.GetMouseButtonDown(1)) { Ray myRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; Physics.Raycast(myRay, out hit) my_target.position = new Vector3(hit.point.x,my_target.position.y,hit.point.z); }摄像机,屏幕点击处,与射线关系
