【问题标题】:Unity - How to detect collision on child object colliderUnity - 如何检测子对象碰撞器上的碰撞
【发布时间】:2015-12-04 22:13:32
【问题描述】:

我们如何使用 c# 事件脚本对对象的子对象进行“OnTriggerEnter2D”事件冲突?

看这个:

有没有办法使用“代表”分配事件?

例如:myObject.EventSample += OnTriggerEnter2D

【问题讨论】:

  • 澄清一下:您希望 OnTriggerEnter2D 在“Point”对象上调用,而不是在“Obstacle”对象上调用?
  • 不,我希望当我的玩家触摸对撞机“点”时调用此事件

标签: events unity3d delegates collision-detection


【解决方案1】:

你当然可以按照你自己的建议去做。让障碍物控制器有这样的功能:

public void ReportedTriggerEnter2D(Collider2D other)
{
    // Do things
}

然后你可以在你的点对象上放一个这样的脚本:

class CollisionReporter : MonoBehaviour
{
    [SerializeField] private ObstacleController m_Controller;

    void OnTriggerEnter2D(Collider2D other)
    { 
        m_Controller.ReportedTriggerEnter2D(other);
    }
}

当然,一定要在检查器中分配控制器。

或者更通用的方法是这样的:

class CollisionReporter : MonoBehaviour
    {
        [Serializable] private class TriggerEnterEvent : UnityEvent<Collider2D>{}
        [SerializeField] private TriggerEnterEvent m_OnTriggerEnter2D = new TriggerEnterEvent();

        void OnTriggerEnter2D(Collider2D other)
        { 
            m_OnTriggerEnter2D.Invoke(other);
        }
    }

使用它,您可以在检查器中分配一个事件处理程序,类似于 UI 按钮。

【讨论】:

    【解决方案2】:

    无论您使用系统类的事件还是动作,您都必须在“点”对象上使用脚本来触发它,但这是您的游戏,如果您不想这样做,我建议您将那个对撞机在父母身上,然后通过与父母发生碰撞时附加到父母的相同脚本让孩子做你想让它做的事情,我希望这是有道理的。否则,直接回答您的问题,不,据我所知,除非有人增加它,否则无法做到。顺便说一句,这是事件将如何运作https://unity3d.com/learn/tutorials/modules/intermediate/scripting/events。尝试他们并询问您是否有任何问题。 谢谢 , 万岁的木头

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      相关资源
      最近更新 更多