自动寻路步骤:
1、把场景中不同的物体勾选static
2、烘培寻路网格
3、添加NavMeshAgent组件
4、给需要寻路的物体添加脚本
游戏中有限状态机的体现:小怪的巡逻和追逐功能
模糊状态机的体现:当玩家离小怪比较近时,小怪会追逐玩家,当玩家离小怪比较远时小怪会停止追逐玩家并且回到出生点,这里的比较近和比较远就是一个模糊概念。在游戏的设计中,是以小怪为圆心,8为半径画圆,当玩家出现在这个范围内,小怪就会追逐玩家,当玩家超出这个范围,小怪就会停止追逐玩家。
1、新建一个plane,window->AI->Navigation,然后在右边就会有Navigation。(如果敌人的路径不是在平面上,选择你要追踪的路径即可,这里是在平面上进行追踪,所以对plane进行烘焙)
2、点击右侧的Navigation,选中plane,设置参数如下,然后点击Bake,点击右下角的Bake进行烘焙网格。(这里是2018.3.6版本,有些版本的Bake在Object界面,找到Bake进行烘焙即可),烘焙完成后可以看到plane变成下面这个样子,说明烘焙成功。
3、导入敌人,这里导入的是资源商店中的资源,(下图最上面那个,它包含两个角色,我用到了其中的一个),导入后把预制体拖到场景中,命名为monster,然后修改他的角色控制器(它原有的状态有很多,但是我这里只用到了巡逻和追逐两个状态),具体操作如下。
1)新建角色控制器
2)把两个状态拖入角色控制器中,这里选择了以下两种,可根据需求修改
3)新建一个bool型来控制状态转换,对两个箭头的设置如下(右侧)
4)把角色控制器赋予monster,并给monster添加刚体和碰撞。
3、添加网格代理,网格代理的参数可适当改变。
文章来源:https://www.toymoban.com/news/detail-756905.html
4、写代码,把代码赋予monster,当玩家与monster的距离小于8时,monster追踪玩家,当距离大于8时,monster停止追踪并回到原来的位置,代码如下:文章来源地址https://www.toymoban.com/news/detail-756905.html
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class MosterController : MonoBehaviour
{
private Animator _animator;
public Transform player;
private float distance;
public NavMeshAgent agent;
Vector3 sta;
// Start is called before the first frame update
void Start()
{
_animator = GetComponent<Animator>();
sta = this.transform.position;
_animator.SetBool("isattack", false);
}
// Update is called once per frame
void Update()
{
Vector3 playerPosition = player.transform.position;
Vector3 ZombieToPlayer = playerPosition - this.transform.position;
distance = ZombieToPlayer.magnitude;
if (distance < 8f)
{
_animator.SetBool("isattack", true);
agent.destination = player.position;
this.transform.LookAt(player);
}
else
{
_animator.SetBool("isattack", true);
agent.destination = sta;
}
}
}
到了这里,关于unity有限状态机和模糊状态机(怪物AI、自动寻路)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!