团结敌人 AI 脚本 C#

Unity Enemy AI script C#

本文关键字:脚本 AI 敌人      更新时间:2023-10-16

我正在尝试在Unity中制作一个高级敌人AI脚本,但我对此有点挣扎。我已经导入了动画和所有内容,但是脚本部分进展得并不顺利。

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

当玩家进入NPC

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

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

这是我当前的脚本:

using UnityEngine;
using System.Collections;
public class guardAttack: MonoBehaviour 
{
  public Transform player;
  static Animator anim;
  // Use this for initialization
  public void Start() 
  {
    anim = GetComponent<Animator>();
  }
  // Update is called once per frame
  public 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.1 f);
      anim.SetBool("isIdle", false);
      if ((direction.magnitude > 5)) 
      {
        this.transform.Translate(0, 0, 0.10 f);
        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);
      }
    }
  }
}

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

请记住,这种"反射"行为只是人工智能领域的表面。

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