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