如果玩家存在或不存在,并且玩家存在杀死该玩家,我做了一些代码来搜索敌人,代码工作正常,但是每当敌人移动速度不断提高时,我都不想速度完全提高了,因此如何使其以相同的启动速度运动而不增加 这是我的代码
void Update () {
if (target == null) {
if (!searchingForThePlayer) {
searchingForThePlayer = true;
StartCoroutine (searchForPlayer ());
}
return;
}
if (Vector3.Distance (target.position, transform.position) < 20) {
transform.position = Vector2.MoveTowards (transform.position, target.position, 1f * Time.deltaTime);
if (target.position.x < transform.position.x && !facingRight)
Flip ();
if (target.position.x > transform.position.x && facingRight)
Flip ();
} else {
}
StartCoroutine (UpdatePath ());
}
IEnumerator searchForPlayer () {
GameObject sRusult = GameObject.FindGameObjectWithTag ("Player");
if (sRusult == null) {
yield return new WaitForSeconds (0.5f);
StartCoroutine (searchForPlayer ());
} else {
target = sRusult.transform;
searchingForThePlayer = false;
StartCoroutine (UpdatePath ());
yield return null;
}
}
IEnumerator UpdatePath () {
if (target == null) {
if (!searchingForThePlayer) {
searchingForThePlayer = true;
StartCoroutine (searchForPlayer ());
}
yield return null;
} else {
if (Vector3.Distance (target.position, transform.position) < 20) {
transform.position = Vector2.MoveTowards (transform.position, target.position, 1f * Time.deltaTime);
if (target.position.x < transform.position.x && !facingRight)
Flip ();
if (target.position.x > transform.position.x && facingRight)
Flip ();
} else {
}
}
// Start a new path to the target position, return the result to the OnPathComplete method
yield return new WaitForSeconds (1f / 2f);
StartCoroutine (UpdatePath ());
}
void Flip () {
Vector3 scale = transform.localScale;
scale.x *= -1;
transform.localScale = scale;
facingRight = !facingRight;
}
答案 0 :(得分:3)
在每一帧中,您都使用Update()
方法启动UpdatePath()
协程。然后,在UpdatePath()
中启动另一个UpdatePath()
协程。在任何情况下都不要启动它,这样可以确保UpdatePath()
永远运行。
由于您还继续在Update()
中开始新的游戏,因此这意味着您将不断堆积在越来越多的协同程序上,这意味着游戏运行的越多,每一帧被调用的UpdatePath()
就越多。
换句话说,从技术上讲,您的对象的速度并没有增加,只是MoveTowards()
被调用的次数,确实具有相同的最终结果。
至于修复,我建议重组您的代码。例如,我非常怀疑Update()
和UpdatePath()
彼此接近完全相同。我还发现UpdatePath()
会在运行结束时自行启动。