我的脚本使用射线广播来随时间造成伤害,这会导致Unity崩溃。有人知道为什么吗?

问题描述 投票:0回答:1

我创建了一个脚本,该脚本会随着时间的流逝使敌人从播放器中对玩家造成伤害,但是一旦我处于敌人移动和造成伤害的所需范围内,它就会使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;
     }
 }
c# unity3d crash
1个回答
0
投票

如果我试图解释您的代码(用伪代码):

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)→导致整体崩溃

© www.soinside.com 2019 - 2024. All rights reserved.