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