在Unity中停止更新功能

时间:2016-11-09 02:19:41

标签: unity3d

我有一些代码,当它执行时,它会向前推送一个字符。问题在于角色永远不会停止移动并永远持续下去。有没有办法阻止角色在2秒后移动?这是我正在使用的代码:

 public class meleeAttack : MonoBehaviour
 {
     public int speed = 500;
     Collider storedOther;
     bool isHit = false;

     void Start()
     {
     }

     void Update()
     {
         if (isHit == true )
         {
             storedOther.GetComponent<Rigidbody>().AddForce(transform.forward * speed);
         }

     }



     void OnTriggerStay(Collider other)
     {
         if (other.gameObject.tag == "Player" && Input.GetKeyUp(KeyCode.F))
         { 
             storedOther = other;
             isHit = true;
         }
     }

 }

我不确定是否有办法停止update()函数,以便停止角色移动。

1 个答案:

答案 0 :(得分:2)

Update函数是Unity脚本生命周期的一部分。如果要停止执行更新功能,则需要停用脚本。为此,您只需使用:

enabled = false;

这将停用脚本生命周期的执行,因此阻止调用Update函数。

现在,看起来你正在对你的角色施加一个力来移动它。你可能想要做的是,在两秒钟之后,移除你角色上的任何力量。为此,您可以使用协同程序,该程序不仅可以在一个帧上执行,而且可以在需要时在几个帧上执行。为此,您创建一个返回IEnumerator参数的函数,并使用StartCoroutine方法调用协程:

 bool forcedApplied = false;

void Update()
{
    if (isHit == true && forceApplied == false)
    {
        storedOther.GetComponent<Rigidbody>().AddForce(transform.forward * speed);

        forceApplied = true;

        StartCoroutine(StopCharacter);

        isHit = false;
    }

}

IEnumerator StopCharacter()
{
    yield return new WaitForSeconds(2);

    storedOther.GetComponent<Rigidbody>().velocity = Vector3.zero;

    forceApplied = false;
}

这些可能是实现您想要做的事情的不同方式。您可以选择与您当前游戏相关的内容并以这种方式修改脚本。