【问题标题】:Disable RigidBody Gravity Temporarily C#暂时禁用刚体重力 C#
【发布时间】:2021-10-22 05:49:18
【问题描述】:

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 今后,只要您发布问题并谈论错误或代码,请发布它们。对您遇到的特定问题的任何尝试都有助于缩小理解差距的来源。它有助于明确您的问题是什么,因为它提供了某种形式的观点,因为当前问题相当笼统。

标签: c# unity3d coroutine rigid-bodies


【解决方案1】:

Rigidbody.useGravity 布尔值正是您正在寻找的。​​p>

首先,获取对要禁用其重力的刚体的引用。例如通过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());

【讨论】:

    【解决方案2】:
    [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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 2022-07-08
      • 1970-01-01
      相关资源
      最近更新 更多