【问题标题】:Is it Possible to Run Code Inside of OnTriggerEnter When the Script is not Active?脚本未激活时是否可以在 OnTriggerEnter 内部运行代码?
【发布时间】:2023-01-11 03:57:52
【问题描述】:

我有一个名为 NPC 的脚本,其中包含一个方法,当我的游戏对象被触发时应该只调用一次但它发生了两次,我怀疑我的另一个脚本(Player)在同一个游戏对象中并继承了同一个类NPC,运行代码,即使它没有激活。这甚至可能吗?

two scripts as components of same game object.

这些是我在检查器上的脚本,默认设置为 SetActive false,当我的游戏开始时,只有其中一个将启用 = true。

public virtual void OnTriggerEnter(Collider other)
{
    IInteractable interactable = other.GetComponent<IInteractable>();

    if (interactable != null && other.gameObject.CompareTag(gameObject.tag) )
    {
        if (other.gameObject.CompareTag("blue"))
        {
            blueBrickList.Add(other.gameObject);
        }
        else if (other.gameObject.CompareTag("green"))
        {
            greenBrickList.Add(other.gameObject);
        }
        else if (other.gameObject.CompareTag("red"))
        {
            redBrickList.Add(other.gameObject);
        }
        
        interactable.Interact();
        Debug.Log("interacted");
    }
}

这是我的基本抽象类的 OnTriggerEnter 方法。

下面是我在 NPC 和玩家脚本中的内容。

public override void OnTriggerEnter(Collider other)
{
    StackParent = stackParent;
    RefObject = refObject;
    
    base.OnTriggerEnter(other);
}

正如我之前所说,当游戏开始时只有一个脚本被启用。那么为什么它连续两次输入“interacted”并且还运行两次 Interact 方法。我错过了什么吗?我什至不知道我是否解释得很好。请帮我 :/

【问题讨论】:

    标签: c# unity3d inheritance game-development


    【解决方案1】:

    是的,unity 不关心组件是否被禁用,如果组件实现了 OnTriggerEnter 那么 unity 将在 trigger conditions 匹配时调用它。您可以更改设计以防止它发生,也可以在方法的开头添加一个 if 条件,例如

    private void OnTriggerEnter(Collider other)
    {
        if (!enabled) return;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-08
      • 2021-12-31
      • 2020-07-15
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2015-03-05
      • 1970-01-01
      相关资源
      最近更新 更多