Unity 3D统计代理人通过一扇门的次数
Unity 3D Counting Number of Agent Passes through a door
我正在尝试使用Unity 进行火灾疏散模拟。我需要计算在疏散期间通过出口门的特工人数。有什么办法吗?
您可以设置一个简单的触发对撞机系统。
首先,你会在出口处放置一个盒子碰撞器,并将其设置为触发,这样它就不是一个固体物体(物体可以穿过它,而不是走进去)。现在,为这个盒子碰撞器添加一个刚体,并将第一个下拉菜单设置为“动态”到“运动学”。现在,一种计算它们的方法。我们将以下脚本添加到盒子碰撞对象:
using UnityEngine;
public class ExitDoor : MonoBehavour
{
void OnTriggerEnter(Collider obj)
{
if (obj.gameObject.tag == “agent”)
{
}
}
}
这还行不通,因为除了 OnTriggerEnter
语句,我们没有其他任何东西。每次游戏对象通过触发对撞机或此游戏对象通过触发对撞机时,都会调用 OnTriggerEnter。我们设置一个if语句来检测通过它的游戏对象是否有某个标签。我们正在搜索一个名为“agent”的标签。将每个代理的标签设置为“代理”。现在我们应该启动一个计数系统。
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,并从中获取 agents。确保将游戏管理脚本中的 ExitDoor 变量设置为用于计数的盒子对撞机游戏对象。
这是未经测试的,如果您发现任何错误或这不是您想要的,请评论此 post 来问我。
我正在尝试使用Unity 进行火灾疏散模拟。我需要计算在疏散期间通过出口门的特工人数。有什么办法吗?
您可以设置一个简单的触发对撞机系统。
首先,你会在出口处放置一个盒子碰撞器,并将其设置为触发,这样它就不是一个固体物体(物体可以穿过它,而不是走进去)。现在,为这个盒子碰撞器添加一个刚体,并将第一个下拉菜单设置为“动态”到“运动学”。现在,一种计算它们的方法。我们将以下脚本添加到盒子碰撞对象:
using UnityEngine;
public class ExitDoor : MonoBehavour
{
void OnTriggerEnter(Collider obj)
{
if (obj.gameObject.tag == “agent”)
{
}
}
}
这还行不通,因为除了 OnTriggerEnter
语句,我们没有其他任何东西。每次游戏对象通过触发对撞机或此游戏对象通过触发对撞机时,都会调用 OnTriggerEnter。我们设置一个if语句来检测通过它的游戏对象是否有某个标签。我们正在搜索一个名为“agent”的标签。将每个代理的标签设置为“代理”。现在我们应该启动一个计数系统。
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,并从中获取 agents。确保将游戏管理脚本中的 ExitDoor 变量设置为用于计数的盒子对撞机游戏对象。
这是未经测试的,如果您发现任何错误或这不是您想要的,请评论此 post 来问我。