基本上,我的问题是什么,有什么方法可以创建一个事件,该事件是在附加到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秒后将其设置