Unity 5. Простой ИИ. Часть 3

Unity 5. Простой ИИ. Часть 3

Простой искусственный интеллект.

Продолжаем создавать простой искусственный интеллект в бесплатном игровом движке Unity5. В прошлых частях мы разобрались с анимацией нашей крысы, теперь создадим скрипт, который будет вызывать определенную анимацию в зависимости от внешних факторов, например если дистанция от крысы до персонажа больше заданной, то крыса будет стоять на месте и будет проигрываться анимация бездействия, если дистанция меньше заданной, то крыса будет направляться в сторону персонажа.

Давайте приступим. Откроем предыдущий проект и добавим новый скрипт  (RatII) и напишем такой код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class RatII : MonoBehaviour {

    [Serializable]
    public class Animation_Rat //подключаем наши анимации
    {
        [SerializeField]
        private AnimationClip _idle;

        [SerializeField]
        private AnimationClip _walk;

        [SerializeField]
        private AnimationClip _run;

        [SerializeField]
        private AnimationClip _death;

        [SerializeField]
        private AnimationClip[] _attack;
    }

    [SerializeField] //подключаем наши параметры, которые создавали в Animatore
    private float _horiz;

    [SerializeField]
    private float _vert;

    [SerializeField]
    private float _attack;

    [SerializeField]
    private bool _stun;

    [SerializeField]
    public bool _death;

    
    private GameObject player;// наш персонаж

    public int rotationSpeed; //переменная скорости поворота

    public Transform target; // на этот объект будет реагировать наша крыса

    private Transform myTransform; // координаты крысы

    private Animator AnimRat = new Animator(); 

    private void SetValue() 
    {
        this.AnimRat.SetFloat("VertMov", this._vert);
        this.AnimRat.SetFloat("HorizMov", this._horiz);
        this.AnimRat.SetFloat("attack", this._attack);
        this.AnimRat.SetBool("Idle", this._stun);
        this.AnimRat.SetBool("death", this._death);

    }

    private void Awake()
    {
        this.myTransform = base.transform; //определяем текущее положение крысы
        this.player = GameObject.FindGameObjectWithTag("Player"); // определяем объект на который будет реагировать крысы
        this.target = player.transform; 
    }

    void Start () {
        this.AnimRat = base.GetComponent();
    }

    private void FixedUpdate()
    {

        this.SetValue();

        if (this.player != null)
        {
            float num = Vector3.Distance(base.transform.position, this.player.transform.position); // если дистанция до персонажа будет меньше 8, то крыса будет двигаться в сторону персонажа
            if (num < 8f && num > 1.2f)
            {
                this._attack = 0f;
                this._vert = 2f;
                this.rotationSpeed = 2;
                this.myTransform.rotation = Quaternion.Slerp(this.myTransform.rotation, Quaternion.LookRotation(this.target.position - this.myTransform.position), (float)this.rotationSpeed * Time.deltaTime);
                this._stun = false;
                this.myTransform.position += this.myTransform.forward * ((float)this.rotationSpeed * Time.deltaTime);
            }
            if (num >= 8f) //если больше, крыса будет стоять
            {
                this._attack = 0f;
                this._stun = true;
            }

            if (num <= 1.2f)
            {
                this._vert = 0f;
                this._attack = 20f;
                this._stun = false;
            }
        }
    }
}

Далее, перемещаем этот скрипт на нашу крысу. Теперь нужно добавить компоненты BoxCollider и Rigidbody , для того чтобы наша крыса не провалилась сквозь землю.

boxrigit

Следующий шаг добавление персонажа, можно добавить своего, а можно стандартного, что мы и сделаем. Назначим персонажу тэг Player, для того чтобы наша крыса знала в какую сторону направляться.

pers

Изменим размеры Plane(земли) по которой будет передвигаться крыса, сделаем размеры равные 10. Так же можно добавит другие элементы, например кубы в виде стен.

cube

Теперь можно проверить игру

logoII

Как видим крыса при достижении определенной дистанции двигается к персонажу и атакует его при приближении к нему. На этом серию уроков про простой искусственный интеллект можно завершить, к скрипту написанному выше можно добавить так же нанесение урона крысой и другие функции. Удачных проектов!


Оставить Комментарий