2017-09-14 10 views
0

我想使用EventManager和根據事件來計算對象之間的距離,並做足夠的對象靠近目標時做些事情。如何創建統一事件以確定物體之間的距離,並在距離足夠小時執行某些操作?

我觀看了YouTube上的視頻並在Google上搜索了示例,但我找不到像我想要的內容。當然,我也看過一般事件的解釋視頻,但我不明白。他們都是英語,這不是我的母語,這使得難以理解。所以,也對任何語法錯誤感到抱歉。他們經常說得這麼快。所以請不要以爲我很懶,我已經找了幾個小時,但我不明白。

我有一個目標物體和幾個敵人物體。這個敵人的物品有標籤'敵人'。目標對象可以移動。我製作了一個協程,所以當目標移動時,敵人會跟隨,直到距離爲0.5。但是從他們到達0.5的距離的那一刻起,敵人就不再移動了。相反,當他們已經達到目標位置時,他們也應該跟隨目標。所以爲了防止這種情況,我改變了while(Vector3.Distance(transform.position, target.position) > 0.5f)while 1 > 0,(所以只是總是),我刪除了'while循環之後'的代碼部分。但這可能不是正確的方法。

因此,簡而言之,我想製作一個事件來跟蹤敵人何時到達或失去目標位置。當三個敵人在目標位置時,我想讓他們變成藍色。

任何人都可以告訴我怎麼做到這一點?我現在不明白,但是當我看到它是如何工作的時候,我可以在遊戲中使用它來獲得更多的事件。

+1

請發表相關的代碼。 – ryeMoss

+0

那麼,你的事件難度,還是與'while'循環?對於事件,使用'UnityEvent'類而不是默認的c#事件+'Observable'編程模式來觀察變量並在值超出特定值或範圍時執行某些操作。就我能理解你的麻煩而言,'Observable'模式也應該解決'while'循環問題。 – XenoRo

回答

0

我認爲你可以使用觸發器對撞機,只是使它更大然後你的目標對象,然後做所有你想了解的方法OnTriggetEnter,OnTriggerStay

0

作爲另一種技術,您可以使用光線投射敵人。 Raycasts將爲您提供比對撞機更多的性能。

您可以在您的目標位置找到您的光線投射,以防您的光線投射擊中敵人,然後將它們變成藍色。例如;

public LayerMask enemyLayer; bool isTouch = false;

public bool isTouched(){ 
     if (Physics.Raycast(transform.position,-Vector3.up,1f,enemyLayer)) { 
      isTouch = true; 
      return isTouch ; 
     } 
     return !isTouch ; 
    }