Зависает Unity 3d

Программирование на Юнити.

Зависает Unity 3d

Сообщение Imydream 09 янв 2020, 11:11

Здравствуйте. Помогите пожалуйста с решением проблемы. При соприкосновении Enemy и Player зависает Unity. До этого момента всё шло хорошо. Код написан по уроку на ютубе. Если нужна ссылка на видео, скину.
Вот код на Enemy
[RequireComponent (typeof (NavMeshAgent))]
public class Enemy : LivingEntity {
public enum State {Idle, Chasing, Attacking};
State currentState;

NavMeshAgent pathfinder;
Transform target;
Material skinMaterial;
Color originalColor;
float attackDistanceThreshold = 0.5f;
float timeBetweenAttack = 1;
float nextAttackTime;
float myCollisionRadius;
float targetCollisionRadius;

protected override void Start () {
base.Start ();
pathfinder = GetComponent <NavMeshAgent> ();
skinMaterial = GetComponent <Renderer>().material;
originalColor = skinMaterial.color;

currentState = State.Chasing;
target = GameObject.FindGameObjectWithTag ("Player").transform;

myCollisionRadius = GetComponent<CapsuleCollider>().radius;
targetCollisionRadius = target.GetComponent<CapsuleCollider>().radius;
StartCoroutine (UpdatePath ());
}

void Update () {
if (Time.time > nextAttackTime) {
float sqrDstToTarget = (target.position - transform.position).sqrMagnitude;
if (sqrDstToTarget < Mathf.Pow (attackDistanceThreshold + myCollisionRadius + targetCollisionRadius, 2)) {
nextAttackTime = Time.time + timeBetweenAttack;
StartCoroutine(Attack());
}
}
}

IEnumerator Attack() {

currentState = State.Attacking;
pathfinder.enabled = false;

Vector3 originalPosition = transform.position;
Vector3 dirToTarget = (target.position - transform.position).normalized;
Vector3 attackPosition = target.position - dirToTarget*(myCollisionRadius);

float attackSpeed = 3;
float percent = 0;
skinMaterial.color = Color.red;

while (percent <= 1) {
percent += Time.deltaTime * attackSpeed;
float interpolation = (-Mathf.Pow(percent,2) + percent) * 4;
transform.position = Vector3.Lerp(originalPosition, attackPosition, interpolation);
yield return null;
}
skinMaterial.color = originalColor;
currentState = State.Chasing;
pathfinder.enabled = true;

}
IEnumerator UpdatePath() {
float refreshRate = 0.25f;

while (target != null) {
if (currentState == State.Chasing){
Vector3 dirToTarget = (target.position - transform.position).normalized;
Vector3 targetPosition = target.position - dirToTarget*(myCollisionRadius + targetCollisionRadius + attackDistanceThreshold/2);
if (!dead){
pathfinder.SetDestination (targetPosition);
}
yield return new WaitForSeconds(refreshRate);
}
}

}
}
Imydream
UNец
 
Сообщения: 3
Зарегистрирован: 09 янв 2020, 11:06

Re: Зависает Unity 3d

Сообщение 1max1 09 янв 2020, 11:45

Бесконечный цикл скорей всего.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Зависает Unity 3d

Сообщение Imydream 09 янв 2020, 11:48

Вот только не понятно, откуда он взялся.
Imydream
UNец
 
Сообщения: 3
Зарегистрирован: 09 янв 2020, 11:06

Re: Зависает Unity 3d

Сообщение Imydream 09 янв 2020, 12:46

IEnumerator UpdatePath() {
float refreshRate = 0.25f;

while (target != null) {
if (currentState == State.Chasing){
Vector3 dirToTarget = (target.position - transform.position).normalized;
Vector3 targetPosition = target.position - dirToTarget*(myCollisionRadius + targetCollisionRadius + attackDistanceThreshold/2);
if (!dead){
pathfinder.SetDestination (targetPosition);
}
}
yield return new WaitForSeconds(refreshRate);

}

}
Всё, ответ нашёл сам. Не правильно скобки поставил. Тему можно закрыть :)
Imydream
UNец
 
Сообщения: 3
Зарегистрирован: 09 янв 2020, 11:06

Re: Зависает Unity 3d

Сообщение seaman 09 янв 2020, 13:31

Если также и впредь будете оформлять код - придется все ошибки искать самому...
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14