Unity Enemy AI脚本C#

时间:2017-01-13 22:42:11

标签: c# animation unity3d artificial-intelligence controls

我正在尝试在Unity中制作一个先进的敌人AI脚本,但我正在努力解决这个问题。我已经导入了动画和所有动画,但脚本编写部分并没有那么顺利。

我正在尝试做什么: NPC应该在一定半径内行走( isWalking ),闲置( isIdle )几秒钟,然后再次行走( isWalking )。

当玩家进入NPC的视野半径时,NPC应该在玩家(运动)之后运行,并在玩家处于近距离( isAttacking )时进行攻击。当玩家超出范围时,NPC应播放第二个空闲动画( isIdle2 ),然后返回第一个空闲动画( isIdle )。

最后,当按下电子琴键时,NPC应播放一次谈话动画( isTalking )。

这是我目前的剧本:

using UnityEngine;
using System.Collections;

public class guardAttack : MonoBehaviour {

public Transform player;
static Animator anim;

// Use this for initialization
void Start () 
{
    anim = GetComponent<Animator>();
}

// Update is called once per frame
void Update () 
{
    Vector3 direction = player.position - this.transform.position;
    float angle = Vector3.Angle(direction,this.transform.forward);
    if (Vector3.Distance (player.position, this.transform.position) < 10 && angle < 30) {

        direction.y = 0;

        this.transform.rotation = Quaternion.Slerp (this.transform.rotation,
            Quaternion.LookRotation (direction), 0.1f);

        anim.SetBool ("isIdle", false);
        if ((direction.magnitude > 5)) {
            this.transform.Translate (0, 0, 0.10f);
            anim.SetBool ("isRunning", true);
            anim.SetBool ("isAttacking", false);
            anim.SetBool ("isTalking", false);
            anim.SetBool ("isIdle2", false);

        } else {
            anim.SetBool ("isRunning", false);
            anim.SetBool ("isAttacking", true);
            anim.SetBool ("isTalking", false);
            anim.SetBool ("isIdle2", false);
        }
        } else {
        anim.SetBool("isIdle", true);
        anim.SetBool("isRunning", false);
        anim.SetBool("isAttacking", false);
        anim.SetBool("isIdle2",false);

        if (Input.GetKeyDown (KeyCode.E)) {
            anim.SetBool("isTalking", true);

        }
    }

}
}

1 个答案:

答案 0 :(得分:0)

你想要使用的是有限状态机 - 我并不是指Mecanim - 用于AI逻辑。这是一个很酷的教程,它使用接口并将添加到您的脚本知识工具箱中#34;。它可能看起来有点压倒性,但如果你试一试,它将准确解决你打算做什么,并帮助你的游戏中的其他方面。

请记住,这种&#34;反射&#34; - 行为只是在人工智能领域的表面。

https://unity3d.com/learn/tutorials/topics/scripting/using-interfaces-make-state-machine-ai?playlist=17117