UnityEngine - 触发器上的多个标签

问题描述 投票:0回答:1

我有一个系统,当敌人(彼得)随机行走时。如果两者都在同一个触发器中,则有许多触发器可以向彼得发出命令开始追逐玩家。但触发器不想同时检测两个标签。

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;
        }
    }
c# unity-game-engine 3d
1个回答
0
投票

使用下面的代码,您可以保留触发区域内所有游戏对象的列表。您可以使用列表上的“包含”方法来检查特定对象是否存在。

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.