Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events Unity-如何在子对象碰撞器上检测碰撞_Events_Unity3d_Delegates_Collision Detection - Fatal编程技术网

Events Unity-如何在子对象碰撞器上检测碰撞

Events Unity-如何在子对象碰撞器上检测碰撞,events,unity3d,delegates,collision-detection,Events,Unity3d,Delegates,Collision Detection,如何使用c#事件脚本在对象的子对象上进行事件“OnTiggerEnter2D”冲突 看看这个: 是否有任何方法可以使用“委托”分配事件 示例:myObject.EventSample+=OnTriggerEnter2D无论您使用系统类的事件还是动作,您都必须使用“point”对象上的脚本来触发它,但这是您的游戏,如果您不想这样做,我建议您将碰撞器放在父对象上,然后让子对象在与父对象发生碰撞时通过附加到父对象的相同脚本执行您希望它执行的操作,我希望这是有意义的。除此之外,你的问题的直接答案是:不

如何使用c#事件脚本在对象的子对象上进行事件“OnTiggerEnter2D”冲突

看看这个:

是否有任何方法可以使用“委托”分配事件


示例:
myObject.EventSample+=OnTriggerEnter2D

无论您使用系统类的事件还是动作,您都必须使用“point”对象上的脚本来触发它,但这是您的游戏,如果您不想这样做,我建议您将碰撞器放在父对象上,然后让子对象在与父对象发生碰撞时通过附加到父对象的相同脚本执行您希望它执行的操作,我希望这是有意义的。除此之外,你的问题的直接答案是:不,就我所知,除非有人增加它,否则这是不可能做到的。顺便说一句,以下是事件将如何运作。试试看,问问你是否有什么问题。 非常感谢。
木材万岁

无论您使用系统类的事件还是动作,都必须使用“point”对象上的脚本来触发它,尽管如此,这是您的游戏,如果您不想这样做,我建议您将碰撞器放在父对象上,然后让子对象在与父对象发生碰撞时通过附加到父对象的相同脚本执行您希望它执行的操作,我希望这是有意义的。除此之外,你的问题的直接答案是:不,就我所知,除非有人增加它,否则这是不可能做到的。顺便说一句,以下是事件将如何运作。试试看,问问你是否有什么问题。 非常感谢。
木头万岁

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

public void ReportedTriggerEnter2D(Collider2D other)
{
    // Do things
}
class CollisionReporter : MonoBehaviour
    {
        [Serializable] private class TriggerEnterEvent : UnityEvent<Collider2D>{}
        [SerializeField] private TriggerEnterEvent m_OnTriggerEnter2D = new TriggerEnterEvent();

        void OnTriggerEnter2D(Collider2D other)
        { 
            m_OnTriggerEnter2D.Invoke(other);
        }
    }
然后,可以在点对象上放置如下脚本:

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

    void OnTriggerEnter2D(Collider2D other)
    { 
        m_Controller.ReportedTriggerEnter2D(other);
    }
}
当然,一定要在inspector中指定控制器

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

public void ReportedTriggerEnter2D(Collider2D other)
{
    // Do things
}
class CollisionReporter : MonoBehaviour
    {
        [Serializable] private class TriggerEnterEvent : UnityEvent<Collider2D>{}
        [SerializeField] private TriggerEnterEvent m_OnTriggerEnter2D = new TriggerEnterEvent();

        void OnTriggerEnter2D(Collider2D other)
        { 
            m_OnTriggerEnter2D.Invoke(other);
        }
    }
类冲突报告器:单行为
{
[Serializable]私有类TriggerInterevent:UnityEvent{}
[SerializeField]私有TriggerInterevent m_OnTriggerEnter2D=新TriggerInterevent();
无效OnTiggerEnter2D(碰撞的R2D其他)
{ 
m_ontriggenter2d.Invoke(其他);
}
}

有了它,您可以在inspector中分配一个事件处理程序,类似于UI按钮。

您确实可以按照自己的建议执行。让障碍物控制器具有如下功能:

public void ReportedTriggerEnter2D(Collider2D other)
{
    // Do things
}
class CollisionReporter : MonoBehaviour
    {
        [Serializable] private class TriggerEnterEvent : UnityEvent<Collider2D>{}
        [SerializeField] private TriggerEnterEvent m_OnTriggerEnter2D = new TriggerEnterEvent();

        void OnTriggerEnter2D(Collider2D other)
        { 
            m_OnTriggerEnter2D.Invoke(other);
        }
    }
然后,可以在点对象上放置如下脚本:

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

    void OnTriggerEnter2D(Collider2D other)
    { 
        m_Controller.ReportedTriggerEnter2D(other);
    }
}
当然,一定要在inspector中指定控制器

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

public void ReportedTriggerEnter2D(Collider2D other)
{
    // Do things
}
class CollisionReporter : MonoBehaviour
    {
        [Serializable] private class TriggerEnterEvent : UnityEvent<Collider2D>{}
        [SerializeField] private TriggerEnterEvent m_OnTriggerEnter2D = new TriggerEnterEvent();

        void OnTriggerEnter2D(Collider2D other)
        { 
            m_OnTriggerEnter2D.Invoke(other);
        }
    }
类冲突报告器:单行为
{
[Serializable]私有类TriggerInterevent:UnityEvent{}
[SerializeField]私有TriggerInterevent m_OnTriggerEnter2D=新TriggerInterevent();
无效OnTiggerEnter2D(碰撞的R2D其他)
{ 
m_ontriggenter2d.Invoke(其他);
}
}

这样,您可以在inspector中指定一个事件处理程序,类似于UI按钮。

只是为了澄清:您希望在“点”对象上调用OnTriggerInter2D,而不是在“障碍物”对象上调用OnTriggerInter2D?不,我希望在我的播放器触摸碰撞器“点”时调用此事件只是澄清一下:你想在“点”对象上调用OnTriggerInter2D,而不是在“障碍物”对象上调用OnTriggerInter2D?不,我想在我的玩家接触碰撞器“点”时调用此事件