[英]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.