簡體   English   中英

網格位置上的Unity3d Raycast

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM