[英]Unity3d Raycast on mesh position
我想用射线投射打一个网格,并获取发生打点的鼠标/屏幕坐标。
public class GetCoordinates: MonoBehaviour {
private GameObject _objectToHit;
private RaycastHit hit;
private Collider coll;
private Ray ray;
private float hitDistance = 200f;
void Start()
{
coll = GetComponent<Collider>();
_objectToHit = GameObject.Find("Street");
}
void Update()
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (coll.Raycast(ray, out hit, hitDistance))
{
Debug.Log(hit.point);
}
}
}
另外,我不确定将脚本添加到被击中对象还是摄像机的位置?
您要使用Camera.WorldToScreenPoint将世界生命值位置转换为屏幕位置。 另外,您只需要在游戏中拥有该脚本的一个实例,否则您将具有多个射线投射。 在选择放置此脚本的位置之前,您应该考虑这一点。 如果没有更多有关它的用途,多少个对象等的信息,我们将无法帮助您做出选择。
编辑有关脚本的用法:
可以肯定的是:射线投射脚本必须具有唯一的实例。 如果你想通过这个脚本与其他对象进行交互,你应该使用GameObject.GetComponent以访问脚本,将做你想要的东西上hit.collider.gameobject功能。
例如,如果您的街道上有一个门,则单击该门将调用Gate对象的GateBehaviour脚本中包含的toggleOpen()函数,如下所示:
if (coll.Raycast(ray, out hit, hitDistance))
{
if(hit.collider.tag == "Gate")
{
GateBehaviour gate = hit.collider.gameobject.GetComponent<GateBehaviour>()
if(gate)
gate.toggleOpen();
}
Debug.Log(hit.point);
}
理想情况下,您应该拥有一个类似Interractable的类,该类将为街道上的所有可交互对象提供唯一的接口。 街道本身也可以从此接口继承。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.