我创建了一个脚本,该脚本会随着时间的流逝使敌人从播放器中对玩家造成伤害,但是一旦我处于敌人移动和造成伤害的所需范围内,它就会使Unity崩溃。有人知道为什么吗?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyMove : MonoBehaviour
{
public Transform target;
public Transform player;
public float enemySpeed;
public int moveTrigger = 1;
public bool isAttacking;
public int AttackTirgger;
public float distanceFromPlayer;
void Update()
{
distanceFromPlayer = Vector3.Distance(target.transform.position, player.transform.position);
if (distanceFromPlayer <= 10 && moveTrigger == 1)
{
transform.LookAt(target);
if (!isAttacking)
StartCoroutine(EnemyDamage());
}
if (distanceFromPlayer < 10 && moveTrigger == 1 && distanceFromPlayer > 3)
{
transform.Translate(Vector3.forward * enemySpeed * Time.deltaTime);
}
}
IEnumerator EnemyDamage()
{
isAttacking = true;
while (distanceFromPlayer <= 10)
{ // in range
RaycastHit PlayerHit;
if (Physics.Raycast(target.transform.position, target.transform.forward, out PlayerHit))
{
Target target = PlayerHit.transform.GetComponent<Target>();
if (target != null)
{
GlobalHealth.playerHealth -= 1;
yield return new WaitForSeconds(2);
}
}
}
isAttacking = false; // out of range
yield return null;
}
}
如果我试图解释您的代码(用伪代码):
if(distance_to_target < 10)
{
lookAt(taget)
move_forward() //so you get closer from the target
while(distance < 10)
{
do_stuff() //the stuff doesn't change distance
}
}
当您的距离小于10,并且由于transform.Translate()
时,它将永远保持<10,因此在这里您有一会儿(true)→导致整体崩溃