C# 当游戏对象被销毁时,如何激活触发器?

C# 当游戏对象被销毁时,如何激活触发器?,c#,unity3d,C#,Unity3d,当该区域的敌人被杀死时,我想激活/启用触发碰撞器。敌人不是按特定顺序出现的,因此不能向单个敌人添加脚本。 我创建了一个空的游戏对象并附加了下面的(错误的)脚本。我想做如果(公共游戏对象被销毁)激活触发器 你知道这个的正确答案吗 public class ActivateDialogueTrigger : MonoBehaviour { public GameObject DialogueTrigger; public GameObject Enemy01; publi

当该区域的敌人被杀死时,我想激活/启用触发碰撞器。敌人不是按特定顺序出现的,因此不能向单个敌人添加脚本。 我创建了一个空的游戏对象并附加了下面的(错误的)脚本。我想做
如果(公共游戏对象被销毁)激活触发器

你知道这个的正确答案吗

public class ActivateDialogueTrigger : MonoBehaviour {

    public GameObject DialogueTrigger;

    public GameObject Enemy01;
    public GameObject Enemy02;
    public GameObject Enemy03;
    public GameObject Enemy04;
    public GameObject Enemy05;
    public GameObject Enemy06;

    void Start () {

        DialogueTrigger.SetActive(false);       
    }


    void Update () {
        if(gameobjects.destroyed){

            DialogueTrigger.SetActive(true);
        }
    }
}
我看到了两种选择:一种是“挑剔”但干净的选择,另一种是快速“肮脏”但效率较低的选择

使用事件 您可以将一个脚本附加到每个对象,该脚本负责在对象被销毁时调度事件

public class OnDestroyDispatcher : MonoBehaviour
{
    public event System.Action<GameObject> OnObjectDestroyed ;
    private void OnDestroy()
    {
        if( OnObjectDestroyed != null ) OnObjectDestroyed( gameObject ) ;
    }
}
public class ActivateDialogueTrigger : MonoBehaviour
{
    // Drag & drop the objects in the inspector
    public GammeObject[] YourGameObjects ;

    // You will be able to add a function once all the objects are destroyed
    public UnityEngine.Events.UnityEvent OnAllObjectsDestroyed;
    
    void Update ()
    {
        CheckAllObjectsAreDestroyed();
    }
    
    private void CheckAllObjectsAreDestroyed ()
    {    
        for( int i = 0 ; i < YourGameObjects.Length ; ++i )
        {
            if( YourGameObjects[i] != null )
                return ;
        }

        if( OnAllObjectsDestroyed != null )
            OnAllObjectsDestroyed.Invoke() ;       
    }

}
公共类OnDestroyDispatcher:MonoBehavior { 公共事件系统。对目标的行动被摧毁; 私有void OnDestroy() { 如果(onObjectDistromed!=null)onObjectDistromed(gameObject); } } 然后,在脚本中:

public class ActivateDialogueTrigger : MonoBehaviour
{
    // Drag & drop the objects in the inspector
    public OnDestroyDispatcher[] OnDestroyDispatchers ;

    // You will be able to add a function once all the objects are destroyed
    public UnityEngine.Events.UnityEvent OnAllObjectsDestroyed;
    
    void Start ()
    {
    
        for( int i = 0 ; i < OnDestroyDispatchers.Length ; ++i )
            OnDestroyDispatchers[i].OnObjectDestroyed += OnObjectDestroyed ;
    }
    
    
    private void OnObjectDestroyed (GameObject destroyedObject)
    {

        CheckAllObjectsAreDestroyed();       
    }
    
    
    private void CheckAllObjectsAreDestroyed ()
    {    
        for( int i = 0 ; i < OnDestroyDispatchers.Length ; ++i )
        {
            if( OnDestroyDispatchers[i] != null || OnDestroyDispatchers[i].gameObject != null )
                return ;
        }

        if( OnAllObjectsDestroyed != null )
            OnAllObjectsDestroyed.Invoke() ;       
    }

}
公共类ActivateDialogue触发器:单一行为
{
//拖放检查器中的对象(&D)
公共OnDestroyDispatcher[]OnDestroyDispatchers;
//一旦所有对象都被销毁,您将能够添加一个函数
公共UnityEngine.Events.UnityEvent OnLobjectsStroted;
无效开始()
{
对于(int i=0;i

通过汇集每个帧 销毁对象后,带有null的相等性检查将返回true。该对象实际上不是空的,但“==”运算符重载,以便您可以检查该对象是否已被销毁

public class OnDestroyDispatcher : MonoBehaviour
{
    public event System.Action<GameObject> OnObjectDestroyed ;
    private void OnDestroy()
    {
        if( OnObjectDestroyed != null ) OnObjectDestroyed( gameObject ) ;
    }
}
public class ActivateDialogueTrigger : MonoBehaviour
{
    // Drag & drop the objects in the inspector
    public GammeObject[] YourGameObjects ;

    // You will be able to add a function once all the objects are destroyed
    public UnityEngine.Events.UnityEvent OnAllObjectsDestroyed;
    
    void Update ()
    {
        CheckAllObjectsAreDestroyed();
    }
    
    private void CheckAllObjectsAreDestroyed ()
    {    
        for( int i = 0 ; i < YourGameObjects.Length ; ++i )
        {
            if( YourGameObjects[i] != null )
                return ;
        }

        if( OnAllObjectsDestroyed != null )
            OnAllObjectsDestroyed.Invoke() ;       
    }

}
公共类ActivateDialogue触发器:单一行为
{
//拖放检查器中的对象(&D)
公共GammeObject[]您的游戏对象;
//一旦所有对象都被销毁,您将能够添加一个函数
公共UnityEngine.Events.UnityEvent OnLobjectsStroted;
无效更新()
{
CheckAllObjectsRedestroyed();
}
私有void checkAllObjectsRedestroyed()
{    
对于(int i=0;i
您做了哪些研究?你试过使用
OnDestroy
方法吗?如果你知道将要来的敌人的数量,你可以添加一个计数器,在敌人死亡时减少它,并检查
If(如Eddge所说的剩余敌人,所有操作需要的是
OnDestroy
,如果她在谷歌上搜索“如何检测物体何时被摧毁”,就可以找到它或者只是一个非常简单的研究抱歉,这是一个非常新的问题,谷歌搜索了如何在对象被破坏时触发事件。我的错,但我从这篇文章中学到了很多。