AI в RPG игре проблема

Форум для всего, что связано с ИИ.

AI в RPG игре проблема

Сообщение HuGu 17 окт 2012, 19:24

Вот такая проблема, idle анимация воспроизводится еще и тогда, когда AI идет обратно, а должна run воспроизводиться, кто может помочь?
Синтаксис:
Используется csharp
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;  
   }  
}
}


Мне надо сделать так, чтобы когда позиция между ГГ и Ботом < 10 то он бежит(есть уже) И проигрывается анимация бега, а когда он в позиции начальной, то проигрываетс анимация IDLE
HuGu
UNец
 
Сообщения: 31
Зарегистрирован: 30 сен 2012, 21:48

ИИ проблемы

Сообщение HuGu 20 окт 2012, 09:53

viewtopic.php?f=68&t=11703

Лень переписывать
HuGu
UNец
 
Сообщения: 31
Зарегистрирован: 30 сен 2012, 21:48

Re: ИИ проблемы

Сообщение Kayler 20 окт 2012, 10:00

апай старую тему а не создавай новую
Аватара пользователя
Kayler
Адепт
 
Сообщения: 1038
Зарегистрирован: 25 авг 2010, 23:49
Откуда: Чувашия

Re: AI в RPG игре проблема

Сообщение seaman 20 окт 2012, 11:35

Ну Вы же сами задаете эту анимацию:
Синтаксис:
Используется csharp
   if(_target.transform.position == _home.transform.position)
   {
    animation.CrossFade("idle");
   }

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

Re: AI в RPG игре проблема

Сообщение HuGu 20 окт 2012, 12:19

seaman писал(а):Ну Вы же сами задаете эту анимацию:
Синтаксис:
Используется csharp
   if(_target.transform.position == _home.transform.position)
   {
    animation.CrossFade("idle");
   }

Если цель - дом будет проигрываться idle.


да, но только когда цель дома, то анимация стойки проигрывается, а когда я отвожу моба, а потом убегаю, то он убегает от меня с анимацией стойки, а бежит ко мне с анимацией бега
HuGu
UNец
 
Сообщения: 31
Зарегистрирован: 30 сен 2012, 21:48

Re: AI в RPG игре проблема

Сообщение seaman 20 окт 2012, 12:24

Ничего не понял из того что Вы сказали. Сравните то что сейчас написали с этими своими словами:
idle анимация воспроизводится еще и тогда, когда AI идет обратно, а должна run воспроизводиться
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: AI в RPG игре проблема

Сообщение HuGu 20 окт 2012, 17:46

seaman писал(а):Ничего не понял из того что Вы сказали. Сравните то что сейчас написали с этими своими словами:
idle анимация воспроизводится еще и тогда, когда AI идет обратно, а должна run воспроизводиться


Короче так сказать, когда Бот движется ко мне, то у него воспроизводится анимация RUN, когда стоит IDLE, а когда он возвращается к начальной позиции воспроизводится IDLE анимация а не RUN. Помогите разобраться, а точнее решить проблему
HuGu
UNец
 
Сообщения: 31
Зарегистрирован: 30 сен 2012, 21:48

Re: AI в RPG игре проблема

Сообщение Good1101 20 окт 2012, 18:07

все верно
Синтаксис:
Используется csharp
public Transform _target; // Указываем переменную, к которой будет двигаться наш агент  
   if(_target.transform.position == _home.transform.position)

 

анимация "idle" проигрыватся когда объект движется к _home
нужно как то изменить эту строчку, примерно так
Синтаксис:
Используется csharp
   if(transform.position == _home.transform.position)
 
Как тут стрелять?
Аватара пользователя
Good1101
Адепт
 
Сообщения: 1100
Зарегистрирован: 17 ноя 2011, 14:07
  • ICQ

Re: AI в RPG игре проблема

Сообщение seaman 20 окт 2012, 19:58

Помогите разобраться, а точнее решить проблему

Я Вам с самого начала сказал где у Вас ошибка. Учитесь читать ответы!
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: AI в RPG игре проблема

Сообщение HuGu 21 окт 2012, 10:50

Good1101 писал(а):все верно
Синтаксис:
Используется csharp
public Transform _target; // Указываем переменную, к которой будет двигаться наш агент  
   if(_target.transform.position == _home.transform.position)

 

анимация "idle" проигрыватся когда объект движется к _home
нужно как то изменить эту строчку, примерно так
Синтаксис:
Используется csharp
   if(transform.position == _home.transform.position)
 


Таааак решил проблему другим методом сделав отдельный объект на сцене с именем "home" и все заработало:

Синтаксис:
Используется csharp
using UnityEngine;  
using System.Collections;  

public class AINavMesh : MonoBehaviour {  
public Transform _target; // Указываем переменную, к которой будет двигаться наш агент  
public AnimationClip _animationAttack;
public AnimationClip _animationRun;
public AnimationClip _animationIdle;
public float lastAttack;
public float cooldown = 0.5f;
private int dead = 0;
public int damage;
NavMeshAgent _agent; // Указываем переменную агента  
   
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 = GameObject.Find("home").transform;
   animation.CrossFade("run");
   }
                if(transform.position.z == GameObject.Find("home").transform.position.z)
                {
                animation.CrossFade("idle");   
                }
                if(transform.position.x == GameObject.Find("home").transform.position.x)
                {
                animation.CrossFade("idle");   
                }
if(Vector3.Distance(_agent.transform.position, player.transform.position) < 4){  
animation.CrossFade("attack");  
_agent.speed = 0;
                        if (Time.time > lastAttack + cooldown)
                        {
                                Health._curHealth -= damage;
                                lastAttack = Time.time;
                        }
}  
else{  
   _agent.speed = 3.5f;
   }
                if(dead==1)
                {
                Application.LoadLevel(0);      
                }
                if (Health._curHealth <= 0)
        {
            Time.timeScale = 0;
                        dead = 1;
        }
        }
}


Но вот как теперь сделать универсальный скрипт из этого, то есть не переписывать домашную позицию для кажлого бота: GameObject.Find("home").transform;
А так как типо было раньше.
HuGu
UNец
 
Сообщения: 31
Зарегистрирован: 30 сен 2012, 21:48


Вернуться в Искуственный Интеллект

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

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