簡體   English   中英

unity 3D 統計代理通過門數

[英]Unity 3D Counting Number of Agent Passes through a door

我正在嘗試使用 Unity 進行火災疏散模擬。 我需要計算疏散期間特工通過出口門的次數。 有什么辦法嗎?

您可以設置一個簡單的觸發對撞機系統。

首先,您將在出口門處放置一個盒子對撞機,並將其設置為觸發,這樣它就不是固體 object(物體可以穿過它,而不是走進它)。 現在,為這個盒子碰撞器添加一個剛體,並將第一個顯示“動態”的下拉菜單設置為“運動學”。 現在,一種計算它們的方法。 我們將以下腳本添加到盒子碰撞器 object:

using UnityEngine;

public class ExitDoor : MonoBehavour
{
   void OnTriggerEnter(Collider obj)
   {
       if (obj.gameObject.tag == “agent”)
       {
       }
   }
}

這還行不通,因為除了OnTriggerEnter語句之外我們沒有其他任何東西。 每次游戲 object 通過觸發對撞機或此游戲 object 通過觸發對撞機時,都會調用 OnTriggerEnter。 我們設置了一個if語句來檢測通過它的游戲object是否有某個標簽。 我們正在搜索一個名為“代理”的標簽。 將每個代理的標簽設置為“代理”。 現在我們應該啟動一個計數系統。

using UnityEngine;

public class ExitDoor : MonoBehavour
{
   public int agents;

   void OnTriggerEnter(Collider obj)
   {
       if (obj.gameObject.tag == “agent”)
       {
           agents += 1;
       }
   }
}

現在,每次代理進入對撞機時,我們將變量加 1。 唯一的問題是,如果代理通過對撞機兩次,它會計算兩次。

該系統已完成,但現在您可能希望從不同的腳本訪問它。 我們將使用GetComponent<>()來訪問腳本。 將此添加到您的游戲管理腳本,或者您想要訪問的任何內容中:

using UnityEngine;

public class GameManagement : MonoBehavour
{
   public GameObject ExitDoor;
   public int agents;

   void Update()
   {
      agents = ExitDoor.GetComponent<ExitDoor>().agents;
      if (agents == 10)
      {
         Debug.Log(“10 agents have exited.”);
      }
   }
}

現在,我們訪問腳本ExitDoor ,並從中獲取代理 確保將游戲管理腳本中的ExitDoor變量設置為用於計數的盒子碰撞游戲 object。

這是未經測試的,如果您遇到任何錯誤或這不是您想要的,請在此帖子上發表評論以詢問我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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