Среда, 29 Марта 2023, 22:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » AINavMesh (Проблема с анимаций возврата)
AINavMesh
FORFUNДата: Среда, 17 Октября 2012, 18:40 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Вот есть скрипт агента, который выполняет функцию AI
Code
using UnityEngine;  
using System.Collections;  

public class AINavMesh : MonoBehaviour {  
public Transform _target; // Указываем переменную, к которой будет двигаться наш агент  
public Transform _home;
public AnimationClip _animationAttack;
public AnimationClip _animationRun;
NavMeshAgent _agent; // Указываем переменную агента  
   
void Awake()
  {
  _home = transform.parent.transform;  
  }
   
void Start () {  
_agent = (NavMeshAgent)this.GetComponent("NavMeshAgent"); // Указываем, что переменная _agent - это наш агент.
   animation.AddClip(_animationAttack, "attack");
   animation.AddClip(_animationRun, "run");
}  

void Update () {
_agent.SetDestination(_target.position); // Заставляем агента двигаться в сторону _target'а  
   GameObject player = GameObject.FindGameObjectWithTag("Player");
   if(Vector3.Distance(_agent.transform.position, player.transform.position) < 10){
    animation.CrossFade("run");  
    _target = player.transform;
}  
   else {
   _target = _home;
    animation.CrossFade("run");
   }
   if(_agent.transform.position = _home.transform.position)
   {
    animation.CrossFade("idle");
   }
if(Vector3.Distance(_agent.transform.position, player.transform.position) < 4){   
animation.CrossFade("attack");  
_agent.speed = 0;
}   
else{   
   _agent.speed = 3.5f;   
   }  
}
}


Но когда хочу создать условие: если агент в позиции дома(_agent и _home), то проигрывается анимация idle

Code
if(_agent.transform.position = _home.transform.position)
   {
    animation.CrossFade("idle");
   }


Unity выдает ошибку в этой строке
Code
if(_agent.transform.position = _home.transform.position)


Что мне делать?

Assets/AINavMesh.cs(33,17): error CS0029: Cannot implicitly convert type `UnityEngine.Vector3' to `bool'


- создавай то, что нравится тебе.
[MIND++] - будь выше и умнее.
PovstalezДата: Среда, 17 Октября 2012, 19:01 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
нужно не "=" а "==". Ты написал присвоить позицию бота такую же как и в _home
FORFUNДата: Среда, 17 Октября 2012, 21:54 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Povstalez, ой ой точно, как же сразу не заметил

Добавлено (17.10.2012, 19:16)
---------------------------------------------
Но вот теперь такая проблема, idle анимация воспроизводится еще и тогда, когда AI идет обратно, а должна run воспроизводиться, кто может помочь?

Code
using UnityEngine;  
using System.Collections;  

public class AINavMesh : MonoBehaviour {  
public Transform _target; // Указываем переменную, к которой будет двигаться наш агент  
public Transform _home;
public AnimationClip _animationAttack;
public AnimationClip _animationRun;
public AnimationClip _animationIdle;
NavMeshAgent _agent; // Указываем переменную агента  
   
void Awake()
  {
  _home = transform.parent.transform;  
  }
   
void Start () {  
_agent = (NavMeshAgent)this.GetComponent("NavMeshAgent"); // Указываем, что переменная _agent - это наш агент.
   animation.AddClip(_animationAttack, "attack");
   animation.AddClip(_animationRun, "run");
   animation.AddClip(_animationIdle, "idle");
}  

void Update () {
_agent.SetDestination(_target.position); // Заставляем агента двигаться в сторону _target'а  
   GameObject player = GameObject.FindGameObjectWithTag("Player");
   if(Vector3.Distance(_agent.transform.position, player.transform.position) < 10){
    animation.CrossFade("run");  
    _target = player.transform;
}  
   else {
   _target = _home;
   animation.CrossFade("run");
   }
   if(_target.transform.position == _home.transform.position)
   {
    animation.CrossFade("idle");
   }
if(Vector3.Distance(_agent.transform.position, player.transform.position) < 4){   
animation.CrossFade("attack");  
_agent.speed = 0;
}   
else{   
   _agent.speed = 3.5f;   
   }  
}
}

Добавлено (17.10.2012, 21:54)
---------------------------------------------
никто ни чем не может помочь.. офигенное сообщество...


- создавай то, что нравится тебе.
[MIND++] - будь выше и умнее.
iNikitДата: Четверг, 18 Октября 2012, 15:51 | Сообщение # 4
участник
Сейчас нет на сайте
Quote (FORFUN)
никто ни чем не может помочь.. офигенное сообщество...

Почему тебе кто-то помогать обязан?
Цитата из правил форума:
Quote

Репутация влияет на отношение пользователей к пользователям. Администрация не рекомендует иметь дела с пользователями с отрицательным уровнем репутации. Пользователи с низким или отрицательным уровнем репутации могут быть заблокированы с первого раза и навсегда, т.к. администрация ориентируется и на репутацию как на показатель ценности пользователя.

По тому, что написано в правилах, с тобой лучше не связываться и ты бесценен. Вот почему ни у кого нет желания тебе помогать.
Quote (FORFUN)
idle анимация воспроизводится еще и тогда, когда AI идет обратно, а должна run воспроизводиться, кто может помочь?

Может... Просто следует слова idle и run поменять местами в коде?



Самый лучший юзер GCUP :3


Сообщение отредактировал iNikit - Четверг, 18 Октября 2012, 15:52
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » AINavMesh (Проблема с анимаций возврата)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2023 Рейтинг