2017-07-19 79 views
0

當玩家在靠近物體時碰到某個鍵時,我需要在每個預製件上觸發一個觸發器。我還需要在預製件和播放器的每個實例之間進行碰撞。在預製件上選擇「正在觸發」時,我似乎只能找到一個工作。處理這個問題的正確方法是什麼?需要在同一預製件上發生碰撞和觸發

回答

1

而不是在對象上使用觸發器,使用Physics.OverlapSphere可以找到範圍爲的所有對象,當玩家按下鍵,然後在對象的腳本中執行一個函數。

觸發事件:

void Update() { 
    if (Input.GetKeyDown("space")) 
    { 
     ApplyEffect(transform.position, RADIUS); 
    } 
} 

RADIUS是所期望的接近玩家

方法1:

void ApplyEffect(Vector3 center, float radius) 
{ 
    Collider[] hitColliders = Physics.OverlapSphere(center, radius); 
    int i = 0; 
    while (i < hitColliders.Length) 
    { 
     hitColliders[i].gameObject.GetComponent<SCRIPT_NAME>().EFFECT_FUNCTION(); 
     i++; 
    } 
} 

SCRIPT_NAME是目標對象上腳本的名稱。
EFFECT_FUNCTION是腳本中函數的名稱。

方法2:
使用通訊系統上類似於在文檔示例中示出的功能的對象執行功能:該第一[如何的應答( https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html

1

當玩家靠近並擊中某個鍵時,您可以在物體上使用界面。碰撞可以由對象碰撞器處理,是否有一個特定的原因需要成爲觸發器?檢查this出來,可能會清除一些isTrigger問題。

+0

請參閱HTTPS ://sackoverflow.com/help/how-to-answer) 這個問題已經回答了,顯然,你可以在這裏添加你的答案。但是在回答之前你需要了解一些觀點。首先,不要添加之前添加了相同代碼或建議的答案。其次,如果用戶非常具體地詢問了問題以及他需要解決什麼問題,請不要添加過於複雜的答案。第三,如果您想就回答或問題提出任何建議,您可以添加評論。 –