@F0Xxx

Ai enemy. Поведение врагов, анимация при передвижении?

Здравствуйте, работаю над поведением мобов, передвижение их в стороны перед нападением и тд. Пока что 3 типа атаки, если игрок на расстоянии 6 от енеми- определенная дальняя атака, если ближе 3 ближняя, 3д игру пишу.
Как создать поведение енеми как в souls играх например. Я например сделал банально интервал перед атаками, удар и после 2 сек енеми стоит просто или идет затем снова удар. Но это как -то топорно. И как соединить анимации правильно, вроде должно работать, в чем проблема, на скриншоте видно как расставил, у каждой анимации галочка стоит на has exit time.
5dc2e7389752a783750574.jpeg

код, где-то не логичный знаю, но ошибок не выдает
public Transform povorotPoint;
  public float speedrotation;
  public GameObject Obj;
  
  //Зона детекта
    public string EnemyTag="Player";
  public float seeDistance = 7f;//дистанция детекта 
  private Transform target;
  public float attackDistance = 4f;//дистанция атаки 
  
  private float timer;//интервал атаки
  
  public GameObject Tochka;
    
  public int name;


  // Use this for initialization
  void Start () {

    target = GameObject.FindWithTag(EnemyTag).transform;
  }
  
  // Update is called once per frame
 void Update () {
    if (Vector3.Distance (transform.position, target.transform.position) < seeDistance) {

      

      Obj.transform.LookAt(povorotPoint);// Быстрый поворот

      Obj.GetComponent<Animator> ().SetBool ("Walk", true); //анимация ходьбы

      Obj.GetComponent<Animator> ().SetBool ("jumpattack2", true);

    }
    else
    {
      Obj.GetComponent<Animator> ().SetBool ("Walk", false); //анимация ходьбы
      Obj.GetComponent<Animator> ().SetBool ("jumpattack2", false);
    }


    if (Vector3.Distance (transform.position, target.transform.position) < attackDistance) {
      
           onAttack ();


           	Obj.GetComponent<RunOnOf>().enabled = false; 	 //  отключение скрипта
      
    }
    else
    {
      Obj.GetComponent<Animator>().SetBool("jumpattack", false);
      Obj.GetComponent<Animator>().SetBool("Attack3", false);
      Obj.GetComponent<RunOnOf>().enabled = true; 	//  включение скрипта
      //Obj.GetComponent<Animator> ().SetBool ("Walk", true); //анимация ходьбы
    }
  
    

  }
  
  
  
  void onAttack()
  {
    timer += 1 * Time.deltaTime;
    if (timer >= 2.7f) {
           
      Obj.GetComponent<Animator> ().SetBool ("jumpattack2", false);

    
      name = Random.Range(0,3);
      if (name == 1) {
        Obj.GetComponent<Animator> ().SetBool ("jumpattack", true); //ближняя атака не проигрывается
      } else {
        Obj.GetComponent<Animator>().SetBool("Attack3", true); // эта ближняя атака не проигрывается тоже
      }

    
      
    //	triggerWeapon.SetActive (true);
      
            timer = 0;

      
    }
  }


Основной вопрос - почему анимации ближней атаки не проигрываются ? Может поделитесь кодом хорошим и скриншот с расстановкой анимации киньте, если возможно. Не понимаю как профессиональные студии делают такое поведение у ботов, разные атаки как в соулс играх у enemy
  • Вопрос задан
  • 616 просмотров
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08
Убери интервал между анимациями. И пусть себе лупит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы