团结敌人 AI 脚本 C#
Unity Enemy AI script C#
我正在尝试在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
相关文章:
- 如何通过cpp程序运行shell脚本
- 在程序中编写脚本来编写和编译代码
- 如何在c++中使用system()来运行包含空格的python脚本
- 在cygwin中运行c++脚本时发生错误
- 如何将真正的字符串从python c-api转换为python脚本
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 在原子中使用犰狳与脚本
- 我适合在我的构建系统中使用 shell 脚本而不是AX_CHECK_COMPILE_FLAG吗?
- CANoe - 无法在 CAPL 脚本中打开.dll
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 将数组/向量发送到 c++ 脚本的 cython 示例
- 脚本的多重定义::LState
- 从C++应用获取PowerShell脚本输出
- 用户控制从 c++ 到 java 脚本的 Webassembly 访问调用
- 使用 Main() 返回值作为 python 脚本的参数
- 如何从测试脚本中运行WAF编译C++程序?
- bash脚本在使用popen()时不返回代码以调用C ++程序
- 团结敌人 AI 脚本 C#
- Gamedev:我应该如何使用lua脚本来管理AI