我有一个系统,当敌人(彼得)随机行走时。如果两者都在同一个触发器中,则有许多触发器可以向彼得发出命令开始追逐玩家。但触发器不想同时检测两个标签。
private void OnTriggerStay(Collider other)
{
if(other.CompareTag("Player") && other.CompareTag("Peter"))
{
PeterSystem.PlayerSpooted = true; // Chase player
}
}
请问有什么想法吗?
我尝试使用布尔值,但即使两者处于不同的触发器,追逐也会被激活。这意味着如果有 50 个具有相同脚本的触发器,则布尔值将连接到场景中同类的所有脚本。
void Update()
{
if(PlayerIn && PeterIn && flashlight.FlashLightIsOn)
{
PeterSystem.PlayerSpooted = true;
}
}
private void OnTriggerEnter(Collider other)
{
if(other.tag == "Player")
{
PlayerIn = true;
}
if(other.tag == "Peter")
{
PeterIn = true;
}
}
private void OnTriggerExit(Collider other)
{
if(other.tag == "Player")
{
PlayerIn = false;
}
if(other.tag == "Peter")
{
PeterIn = false;
}
}
使用下面的代码,您可以保留触发区域内所有游戏对象的列表。您可以使用列表上的“包含”方法来检查特定对象是否存在。
using System.Collections.Generic;
using UnityEngine;
public class TriggerZoneController : MonoBehaviour
{
private List<GameObject> objectsInside = new List<GameObject>();
private void OnTriggerEnter(Collider other)
{
if (!objectsInside.Contains(other.gameObject))
{
objectsInside.Add(other.gameObject);
}
}
private void OnTriggerExit(Collider other)
{
if (objectsInside.Contains(other.gameObject))
{
objectsInside.Remove(other.gameObject);
}
}
// Optional: You can add a method to retrieve the list of objects inside the trigger.
public List<GameObject> GetObjectsInside()
{
return objectsInside;
}
}