暂时禁用RigidBody重力



首先我想道歉,因为我知道这是一个非常基本的要求,但我对这个世界很陌生。

我只是想禁用刚体的重力元素一段时间,然后启用它直到游戏重置。如果我已经理解了我在谷歌上找到的东西,我需要使用协程,但我这样做有问题。

我最初尝试将我的gravity元素设置为false,并使用Wait For Seconds语句在这么长时间后将gravity设置为true,但这给了我错误。

任何帮助都将是非常感激的。

刚体。useGravity布尔值正是你要找的。

首先,获取您希望禁用其重力的刚体的引用。例如通过GetComponent:

private Rigidbody myRb;
public void Start()
{
myRb = GetComponent<Rigidbody>();
}
接下来,创建一个简单的协程:
public IEnumerator GravityDisableRoutine()
{
myRb.useGravity = false;
yield return new WaitForSeconds(10); //You may change this number of seconds
myRb.useGravity = true;
}

现在,当你想要禁用重力时,调用:

StartCoroutine(GravityDisableRoutine());
[SerializeField] private Rigidbody rb = null;
private Coroutine disbaledGravity = null;
public void DisableGravity(float timeToDisable)
{
rb.useGravity = false;
if(disabledGravity  != null)
StopCoroutine(disabledGravity);
disableGravity = StartCoroutine(EnableGravityAfterDelay(timeToDisable));
}
private IEnumerator EnableGravityAfterDelay(float delay)
{
yield return new WaitForSeconds(delay);
rb.useGravity = true;
disableGravity = null;
}

抱歉,如果有错别字-在移动端。一般的想法是在一段时间内调用公共函数,此时重力应该被禁用。如果已经发生了一个禁用重力事件,它将被清除并替换为新的事件。在调用disable gravity之后的持续时间过去之后,将重新为对象启用重力。一旦离开移动设备,我将添加一些资源链接,以帮助理解所使用的功能。

最新更新