前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity-黑暗之魂复刻-动画控制器

Unity-黑暗之魂复刻-动画控制器

作者头像
祝你万事顺利
发布2019-05-29 17:02:33
8000
发布2019-05-29 17:02:33
举报
文章被收录于专栏:Unity游戏开发

在Animator中有一个选项ApplyRootMotion我们取消勾选,这个选项将动画中根节点的移动量套用到物体的XYZ中。

一维混合树 1D Blend Tree

1.BlendType中我们常用1D与2D Freeform Directional 在1D中混合树只受一个Parameter的影响 2.Threshold(阈值)参数,这个参数将用来改变混合多个动画的比例。 3.时钟:来控制动画的播放速度 4.镜像:动画将以镜像的方式进行播放

BlendTree1D.PNG

BlendTree面板.PNG

将PI与AC module进行串接

创建一个ActorController类引用用户的输入类PlayerInput和引用动画的GameObject,将animator中的混合树的参数设置为用户输入的参数。

角色行走

通过Input的值与当前角色的前后左右相乘来控制角色在场景中的朝向。将Dup和Dright的平方相加开根号作为移动的距离,方向将Dright与transform.right相乘加上Dup与transform.forward相乘得到移动的方向。这种方法存在一些问题,当同时按两个垂直方向的键位的时候,我们将得到根号2的结果,这不是我们像要的结果。

代码语言:javascript
复制
        Dmag = Mathf.Sqrt(Dup * Dup + Dright *Dright);
        Dvec = Dright * transform.right + Dup * transform.forward;
代码语言:javascript
复制
        anim.SetFloat("forward", pi.Dmag);
        //控制角色移动是控制将Input的前后左右控制角色当前的前后左右
        model.transform.forward = pi.Dvec;

我们引用一篇Paper中的解法,这里给出截图

坐标轴转换.PNG

球形插值对角色的旋转进行平滑处理,使用球形插值

代码语言:javascript
复制
if(pi.Dmag > 0.1f)
        {
            //使用球形插值,每次插值将Vector3沿着球面进行移动,而不是穿过球体
            model.transform.forward = Vector3.Slerp(model.transform.forward, pi.Dvec, 0.3f);
        }

线性插值进行优化动画的Parameter的值,让角色的行走和跑步的转换更加平滑

代码语言:javascript
复制
        float targetRunMulti = ((pi.run) ? 2.0f : 1.0f);
        anim.SetFloat("forward",Mathf.Lerp(anim.GetFloat("forward"), pi.Dmag * targetRunMulti,0.2f) );
再谈Rigidbody

在Update中我们的刷新速度与程序有相关 在FixedUpdate中以固定的刷新速度进行刷新,物理引擎会根据这个进行刷新 我们通过Rigidbody控制角色移动的时候有两种方法: 1.在当前rigidbody的position上加一个新的vector3作为他的移动量 2.直接改变rigidbody的velocity(速度)这个参数,使用这种方法的时候要注意在存在斜坡的时候,velocity我们要注意y分量,如果直接将我们的Input的虚拟映射的速度给它会存在y分量为0的情况,所以我们要让velocity的y继续使用它原本的y。

代码语言:javascript
复制
 //通过rigidbody的Position控制gameObj的Pos
        //rigid.position += movingVec * Time.fixedDeltaTime * walkSpeed;
        //使用velocity时会复写velocity中的y分量,将y分量设为0
        rigid.velocity = new Vector3(movingVec.x,rigid.velocity.y,movingVec.z) * walkSpeed;
```![BlendTree1D.PNG](https://upload-images.jianshu.io/upload_images/11173460-918d7296f648832b.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.05.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一维混合树 1D Blend Tree
  • 将PI与AC module进行串接
  • 角色行走
  • 再谈Rigidbody
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档