[Unity][NavMesh]使用OffMeshLink组件怎么播放Animation跳跃爬梯子跑酷动画
参考资料1、2、3里面有详细的配置 NavMeshAgent的 OffMeshLink组件的设置。
那么问题来了,当角色 的NavMeshAgent在 OffMeshLink组件上的时候,怎样判断播放跳跃、攀爬、爬梯子的动画。
逻辑图
判断方法:
方案1.比较OffMeshLink组件物体的 StartTransform和 EndTransform(小黄方块和小蓝方块物体的 位置)
if (agent.currentOffMeshLinkData.offMeshLink != null)
{
Debug.Log(" agent.isOnOffMeshLink::" + agent.isOnOffMeshLink + "/" + agent.currentOffMeshLinkData.offMeshLink.area);
//vector3 = 小黄方块 的坐标 - 小蓝方块 的坐标
Vector3 vector3 = agent.currentOffMeshLinkData.offMeshLink.endTransform.position -
agent.currentOffMeshLinkData.offMeshLink.startTransform.position;
if (vector3.x > 0
&& vector3.y == 0
&& vector3.z == 0)//播放翻越围栏 动画
{
}
if (vector3.x > 0
&& vector3.y < 0
&& vector3.z == 0)//播放向下爬 动画
{
}
if (vector3.x != 0
&& vector3.y > 0
&& vector3.z == 0)//播放爬梯子 动画
{
}
}
方案2.NavMeshAgent.currentOffMeshLinkData.offMeshLink.area
if (agent.currentOffMeshLinkData.offMeshLink != null)
{
//当Navigation的Area为ClimbLadder序号为4
if (agent.currentOffMeshLinkData.offMeshLink.area == 4)
{
//播放 爬梯子的 动画
animator.SetInteger("actionInt",4);
agent.speed = (float)(agent_speed*0.02);//需要改变NavMeshAgent的速度
}
//当Navigation的Area为JumpOverWall序号为5
if (agent.currentOffMeshLinkData.offMeshLink.area == 5)
{
//播放 攀越栏杆的 动画
animator.SetInteger("actionInt",5);
agent.speed = (float)(agent_speed * 0.2);//需要改变NavMeshAgent的速度
}
//当Navigation的Area为ClimbDown序号为6
if (agent.currentOffMeshLinkData.offMeshLink.area == 6)
{
//播放 向下爬的 动画
animator.SetInteger("actionInt",6);
}
}
else
{
animator.SetInteger("actionInt",0);
agent.speed = agent_speed;//需要 初始化 NavMeshAgent的速度
}
出现的问题:
Q1:点击对应的OffMeshLink没有反应
A1:玩家角色的NavMeshAgent组件的AreaMask没有勾选 爬墙、翻越栏杆的 Area。勾选对应的Area即可。
Q2:点击对应的OffMeshLink没有进行位移
A2:含有OffMeshLink组件的AutoUpdatePosition没有勾选,就需要手动进行位置的操作。
说明,相关参数的 内容 均在参考资料中。有些代码有所偏差,以实际结果为准。
参考资料:
4.NavMeshAgent.currentOffMeshLinkData
5.NavMeshAgent.isOnOffMeshLink
8.