[Unity][NavMesh]使用OffMeshLink组件怎么播放Animation跳跃爬梯子跑酷动画

版权声明:本博客一本正经胡说八道,文章内容不能作参考。本文为博主原创文章,未经博主允许不得转载。该博客所用图片资源均作学习分享用途,仅供参考,请勿用于商业行为。传播者自负。 如果本博客所写文章侵犯到您的权益,请主动联系留言,我们将及时删除相关内容。 https://blog.csdn.net/BuladeMian/article/details/90374913

参考资料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没有勾选,就需要手动进行位置的操作。

说明,相关参数的 内容 均在参考资料中。有些代码有所偏差,以实际结果为准。


参考资料:

1.unity自带寻路Navmesh入门教程(一)

2.unity自带寻路Navmesh入门教程(二)

3.unity自带寻路Navmesh入门教程(三)

4.NavMeshAgent.currentOffMeshLinkData

5.NavMeshAgent.isOnOffMeshLink

6.OffMeshLinkData

7.OffMeshLink.area

8.

猜你喜欢

转载自blog.csdn.net/BuladeMian/article/details/90374913
今日推荐