gpt4 book ai didi

c# - 我的脚本使用光线转换随着时间的推移造成伤害,导致 Unity 崩溃。有谁知道为什么?

转载 作者:行者123 更新时间:2023-12-02 07:19:15 25 4
gpt4 key购买 nike

我创建了一个脚本,可以让敌人从光线转换中随着时间的推移对玩家造成伤害,但是一旦我进入敌人移动和造成伤害所需的范围内,它就会使 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,所以在这里你有一段时间(真)→使统一崩溃

关于c# - 我的脚本使用光线转换随着时间的推移造成伤害,导致 Unity 崩溃。有谁知道为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61569171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com