我有一些代码,当它执行时,它会向前推送一个字符。问题在于角色永远不会停止移动并永远持续下去。有没有办法阻止角色在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()函数,以便停止角色移动。
答案 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;
}
这些可能是实现您想要做的事情的不同方式。您可以选择与您当前游戏相关的内容并以这种方式修改脚本。