暂时禁用刚体重力 C#

Disable RigidBody Gravity Temporarily C#

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

我只想在一段时间内禁用刚体的重力元素,然后再启用它直到游戏重置。如果我理解我在 google 上找到的内容,我需要使用协程,但我在这样做时遇到了问题。

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

如有任何帮助,我们将不胜感激。

[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;
}

抱歉,如果有拼写错误 - 在移动设备上。一般的想法是在一段时间内调用 public 函数,此时重力应该被禁用。如果已发生禁用重力事件,则会将其清除并替换为新事件。在禁用重力调用后持续时间过去后,将为对象重新启用重力。一旦关闭移动设备,我将添加一些资源链接以帮助理解所使用的功能。

Rigidbody.useGravity 布尔值正是您要找的。

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

private Rigidbody myRb;

public void Start()
{
    myRb = GetComponent<Rigidbody>();
}

接下来,创建一个简单的 coroutine:

public IEnumerator GravityDisableRoutine()
{
    myRb.useGravity = false;
    yield return new WaitForSeconds(10); //You may change this number of seconds
    myRb.useGravity = true;
}

现在,只要您想禁用重力,请调用:

StartCoroutine(GravityDisableRoutine());