在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的结果,这不是我们像要的结果。

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

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

坐标轴转换.PNG

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

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

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

        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。

 //通过rigidbody的Position控制gameObj的Pos//rigid.position += movingVec * Time.fixedDeltaTime * walkSpeed;//使用velocity时会复写velocity中的y分量,将y分量设为0rigid.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)

Unity-黑暗之魂复刻-动画控制器相关推荐

  1. unity简单复刻无敌破坏王

    使用unity简单复刻无敌破坏王总结 国庆突发奇想想简单复刻一下无敌破坏王,这里写一些总结,希望也能对大家有帮助 游戏截图: 基本思路: 时间有限,也只是简单复刻,所以只实现破坏方块的功能,画面算是广 ...

  2. 傅老师黑暗之魂复刻笔记(第一季第一部分)

    1. 在Unity中通过一维混合树实现人物静止与跑动之间的动态切换,可以通过一维的参数混合两个动画,forward值为0时静止,1时完全走动: 2. GetComponent函数全部在Awake和St ...

  3. [技美CG]Unity3D复刻UnityShader 之 ShaderToy - Bubbles

    Unity3D复刻UnityShader 之 ShaderToy - Bubbles 背景: 官方地址/参考资料: ShaderToy-Bubbles原始代码: Unity复刻开始 核心显示类: 核心 ...

  4. Unity复刻骑砍中的帝国象棋(一)

    Unity复刻骑砍中的帝国象棋(一) 起因和简介 这两天从一款游戏中发现了这么个棋类小游戏,觉得挺有意思,没错,就是下面这个: 作为程序员的我,一下就想到复刻它一下.这个棋类小游戏,我并不知道它确切的 ...

  5. 【Mib自看】黑魂复刻Unity脚本

    [课程地址]B站傅老师Unity课程学习记录,仅代表个人理解. [自看]黑魂复刻Unity脚本 1.移动脚本 设计思路 2.动画 动画脚本:ActorController + 输入脚本:PlayerI ...

  6. 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器

    对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...

  7. ppt转html5 带动画_我复刻了IPhone12这页发布会PPT

    今年苹果发布会没有看,但是最近看到三石兄发了一篇关于发布会现场的这页PPT复刻的推文,它介绍的是利用直线辅助的方法来完成. 三石兄相关推文: iPhone12发布会PPT,你也能做!​mp.weixi ...

  8. Unity 2D动画控制器详解

    http://www.tairan.com/archives/6939#16 文章目录 开始 过渡 编辑过渡 颜色变化 动画参数 复习一下 CatConga动画 CatDisappear Clip A ...

  9. 复刻 Unity编辑器 移动的方式

    复刻 Unity编辑器 移动的方式 第一人称移动 自定义键值补充 代码搭载 老规矩,直接上代码: 第一人称移动 using System.Collections; using System.Colle ...

最新文章

  1. mvc ajax提交html标签,asp.net-mvc – 如何使用ajax get或post在带有参数的mvc中将数据从View传递到Controller...
  2. 3-openstack之keystone上
  3. 【OpenGL】十四、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_STRIP 三角形 | GL_TRIANGLE_STRIP 三角形绘制分析 )
  4. 单片机里XPL是什么_单片机可以替代PLC么?
  5. springboot+jwt实现token登陆权限认证
  6. android布局属性
  7. [O365] Azure Active Directory Sync EVENT ID 906 FAILED While Purging Run History. Invalid Namespace
  8. Windows 增加 Open command window here 选项
  9. swagger默认访问路径_spring-boot集成swagger-ui修改默认访问路径
  10. 使用小乌龟快速上手git
  11. a59s刷机包卡刷 oppo_OPPO A59S刷机包下载|OPPO A59S刷机包官方下载-太平洋下载中心...
  12. java万年历项目百度云_Java开发万年历
  13. gp数据库主节点故障导致数据库无法重启报错
  14. xp系统一直跳出宽带连接服务器,xp系统一直显示正在获取网络地址的操作方案...
  15. hp服务器增加raid卡,HP服务器增加硬盘实施方案
  16. C 实现黑客帝国数字雨
  17. 局域网传文件_iPhone与安卓跨系统「隔空投送」,传大文件超好用
  18. 已知 XYZ+YZZ=532,其中,X、Y、Z 为数字,编程求出 X、Y 和 Z 的值
  19. 双系统Window+Linux,卸载Linux
  20. 使用IDEA写程序时,运行忽然报错,提示:在类*** 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)

热门文章

  1. Zema自学--3(实际操作)
  2. 计算机网络系统不可用,网络连接不可用,小编教你电脑网络连接不可用怎么办...
  3. 微信账单怎么查?微信流水账单怎么打印
  4. 教孩子学编程python豆瓣_教孩子学编程 Python
  5. docker使用docker compose file部署项目时,实现容器卷挂载,并对容器内文件夹赋予权限
  6. k8s调度:亲和度、容忍度
  7. 联想拯救者y7000电池耗电快_联想拯救者Y7000游戏本测评之温度、续航双测评
  8. spring boot 整合 jpa
  9. 哔哩哔哩bilibili自动上传视频脚本-配合爬虫营销号狂喜
  10. 什么是CVE?常见漏洞和暴露列表概述