第九天
回顾操作
与前面相同的操作,把幽灵对象加入prefab,并为其创建一个Anmator controllor拖入它的Animator组件,打开这个Anmator controllor将动画里的Ghost@Walk拖入其中。
然后添加胶囊对碰组件和刚体组件并分别作如下设置
其中勾选刚体组件的Is Kinematic是为了使物体不受外力的影响,但它依然可以被碰撞,可以解决之前的碰撞后坐标移动的问题。
为幽灵添加视线
在先前我们已经有了gargoyle的视线对象PointOfView
为了避免重复操作我们将该对象加入prefabs预设,拖动该对象到Assets/prefab文件中。
选择Open Prefab,再拖动一次,或是直接打开Gargoyle的prefab拖入。
成功后如下图:
再进入Ghost的prefab,将Assets/prefabs中的PointOfView拖入其中,如下图
在Inspertor窗口对其属性作如下设置
最后效果如下
添加导航网格代理组件(Nav Mesh Agent Component)
我们需要幽灵能在游戏环境中移动,将有两个组件来完成这件事
Nav Mesh Agent和 script
为Ghost对象添加一个Nav Mesh Agent组件,并对其作如下设置
效果如下图
保存
创建一个新脚本命名为WaypointPatrol
创建完毕后拖入Ghost对象的frefab预设
编辑:
思路:设置导航网格代理的目的地,并逐帧检查它是否到达了目的地
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;//NavMeshAgent类所在的命名空间
public class WaypointPatrol : MonoBehaviour
{
public NavMeshAgent navMeshAgent;
public Transform[] waypoints;//一个存储Transform类型数据的数组,主要为了存储多个目的地
int m_CurrentWaypointIndex;//用于检索数组的每个元素
// Start is called before the first frame update
void Start()
{
navMeshAgent.SetDestination(waypoints[0].position);//将该数组的第一个元素设为初始目标
}
// Update is called once per frame
void Update()
{
if(navMeshAgent.remainingDistance < navMeshAgent.stoppingDistance)//如果剩余的距离小于先前设置的0.2,则视为到达目标地
{
m_CurrentWaypointIndex = (m_CurrentWaypointIndex + 1) % waypoints.Length;//计数器,m_CurrentWaypointIndex的值始终在0到waypoints.Length之间循环
navMeshAgent.SetDestination(waypoints[m_CurrentWaypointIndex].position);//切换下一个目标,最终回到初始地点
}
}
}
完成后作如下设置,将Nav Mesh Agent组件拖入以下属性中
保存
额外放置三个Ghost
退出prefab选中Ghost对象,按快捷键Ctrl+D,快速复制
分别设置他们的坐标为(-5.3,0,-3.1),(1.5,0,4),(3.2,0,6.5),(7.4,0,-3)
创建和定位幽灵的路径
创建一个空对象重命名为Waypoint
用复制Ghost对象的方法,如此而外复制9个Waypoint
选中Ghost对象,将前两个Waypoint依次拖入,Waypoint Patrol中的Waypoints即脚本中声明的数组
分别设置两个Waypoint对象的坐标为(-5.3,0,6.7),(-5.5,0,-4.5)。
对Ghost(1)和Ghost(3)采取同样的操作
分别设置位置为
Ghost(1):Waypoint(2)(1.2,0,7.7),Waypoint(3)(0.9,0,-3.5);
Ghost(3):Waypoint(8)(3.2,0,-5),Waypoint(9)(7.4,0,-2)。
再将剩下的Waypoint对象对象都拖入Ghost(2)的Waypoints数组中并如下设置
Waypoint (4) (3.2, 0, 5.6)
Waypoint (5) (3.2, 0, 12.3)
Waypoint (6) (6.5, 0, 12.3)
Waypoint (7) (6.5, 0, 5.6)
同样的方法再添加两个石像鬼分别设置其坐标为
Gargoyle (1) position (-2.6, 0, -8.5).
Gargoyle (1) rotation (0, 30, 0).
Gargoyle (2) position (-4.8, 0, 8.9).
另外为了便于查看,可以创建一些空的类把你的游戏对象们进行分类如下图