是否有任何方法可以创建一个事件,该事件每当使刚性机体变为true时启动功能



基本上,我的问题是什么,有什么方法可以创建一个事件,该事件是在附加到gameObject上的刚体时做某事的吗?

我有一个问题,如果将某些对象变为true时,我必须在1或2秒后制作相同的对象运动false

重要:此方法要求您从所有代码中更改刚性体体的iSkinematic变量的方式。

首先,您创建一个属性来设置ISKINEMATIC,而不是直接通过刚体访问。

private Rigidbody rb;
public bool IsKinematic
{
    get
    {
        return rb.isKinematic;
    }
    set
    {
        rb.isKinematic = value;
    }
}

现在,您声明了每当iSkinematic更改时发射的事件。

public event EventHandler OnKinematicValueChange;

并将您的iSkinematic属性修改为:

public bool IsKinematic
{
    get
    {
        return rb.isKinematic;
    }
    set
    {
        // Similar to if (OnKinematicValueChange != null) OnKinematicValueChange(this, EventArgs.Empty)
        OnKinematicValueChange?.Invoke(this, EventArgs.Empty);
        rb.isKinematic = value;
    }
}

这使每次通过属性更改ISKINEMATIC,onkinematicValueChange事件被解雇。

最后,请确保在清醒/启动方法中订阅该事件,以便每次更改Iskinatic都会触发。

private void Awake()
{
    OnKinematicValueChange += OnKinematicValueChangeHandler;
    // or
    OnKinematicValueChange += (sender, args) => 
    {
        // Event handling stuff
        // Disable isKinematic after 2 seconds with Coroutine etc.
    };
{
private void OnKinematicValueChangeHandler(object sender, EventArgs args);
{
    // Event handling stuff
    // Disable isKinematic after 2 seconds with Coroutine etc.
{

从这一点开始,您需要通过使用ISKINEMATIC属性将所有引用更改对刚性机体的ISKINEMATIC变量。

确保还要检查属性中的刚体空心并提供处理代码。

您可以在更新功能中检查它。

if (yourGameObject.GetComponent<Rigidbody>().isKinematic == true)    
{
    yourGameObject.GetComponent<Rigidbody>().isKinematic = false; 
}

如果要在1或2秒后将其设置

最新更新