赞
踩
自动寻路步骤:
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、添加网格代理,网格代理的参数可适当改变。
4、写代码,把代码赋予monster,当玩家与monster的距离小于8时,monster追踪玩家,当距离大于8时,monster停止追踪并回到原来的位置,代码如下:
- 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;
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。