【问题标题】:Unity Enemy AI script C#Unity Enemy AI 脚本 C#
【发布时间】:2017-01-13 22:42:10
【问题描述】:

我正在尝试在 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);

      }
    }

  }

}

【问题讨论】:

  • 实际的问题/问题是什么?

标签: c# animation unity3d artificial-intelligence controls


【解决方案1】:

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

请记住,这种“反射”行为只是人工智能领域的皮毛。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多