混合树

前面我们通过在Animation界面添加单独的动作来控制动画,这样做比较麻烦,每个单独的属性,比如站立,奔跑等,都需要单独的代码来控制。现在我们可以通过使用混合树,其基本思想是将相近的动画混合起来,使用一个参数控制。比如,行走和奔跑,我们都使用参数“Vertical”控制,使用混合树后,系统会检测,当这个值在某个区间会播放行走动画,在某个区间又播放奔跑动画。

混合树的创建方法如下:

创建好后如下:

Blend Type:混合类型

Parameters:控制参数

Compute Positions:计算位置

注意:看Motion中的参数,比如Run,Y值表示前进方向,这里的控制值为4点几,所以在代码中也要乘以这个值!!!

混合类型之2D Blending混合类型:

2D Simple Directional:融合动画,动画的方向不能相同

2D Freform Directional:融合动画,动画的方向可以相同。使用这种方式必须保证一个动画位于(0,0)点

2D Freform Cartesian:融合动画,所有动画在同一方向,参数X和Y代表不同类型,比如X代表速度,Y代表旋转

动画匹配(Match Target)

动画匹配可以使游戏中的动画效果更好,比如,一个角色在翻墙的时候使用翻墙动画,需要左手撑在墙上越过墙。不适用动画匹配,效果就是原始动画中看到的那样。而使用动画匹配后,角色在翻墙的时候可以将左手与墙面进行贴合,更加逼真。

下面是一段角色翻墙的代码:

    private void ProcessVault()
{
bool isVault = false;
if (anim.GetFloat(speedZID) > 3 && anim.GetCurrentAnimatorStateInfo(0).IsName("Locomotion"))
{
RaycastHit hit;
if (Physics.Raycast(transform.position + Vector3.up * 0.3f, transform.forward, out hit, 4))
{
if (hit.collider.tag == "Obstacle")
{
if (hit.distance > 3)
{
// 计算匹配位置
Vector3 point = hit.point;
point.y = hit.collider.transform.position.y + hit.collider.bounds.size.y + 0.07f;
matchTarget = point;
isVault = true;
}
}
}
}
anim.SetBool(vaultID, isVault); // 动画转换期间匹配无效,所以要判断一下
if (anim.GetCurrentAnimatorStateInfo(0).IsName("Vault") && anim.IsInTransition(0) == false)
{
//指定了匹配的位置、角度、身体的具体部分、权重、匹配开始及匹配结束的时间
anim.MatchTarget(matchTarget, Quaternion.identity, AvatarTarget.LeftHand, new MatchTargetWeightMask(Vector3.one, 0), 0.32f, 0.4f);
}
}

注意:在使用MatchTarget函数的时候,权重的第一个参数表示位置,第二个坐标表示旋转。开始匹配和匹配结束时间,指的是这两个时间在整个动画中的百分比位置,而且结束时间表示的是匹配好的时间。比如,上面例子中的结束时间指的是手掌的墙壁完全贴合的时间。

最新文章

  1. IOS系列swift语言之课时二
  2. Java程序员们最常犯的10个错误
  3. Oracle 服务器端执行带参数的procedure
  4. FreeRTOS和Ucos在打开关闭中断的区别
  5. Java代码注释XXX TODO FIXME 的意义
  6. hdu1162(最小生成树 prim or kruscal)
  7. 使用七牛云存储实现Android的自动更新
  8. android手机出现sqlite3 not found的解决方法
  9. ruby -- 进阶学习(十一)配置解决production环境下无法加载css或js
  10. Linux环境下实现哲学家就餐问题(2)
  11. switch-case 执行顺序
  12. java编解码技术,json序列化与二进制序列化
  13. [转载]C# HashTable 遍历与排序
  14. 使用ExpandableListView实现一个时光轴
  15. Java数据类型在实际开发中的应用二枚举类型
  16. 201521123002《Java程序设计》第10周学习总结
  17. eclipse使用jrebel
  18. Generative Adversarial Nets[BEGAN]
  19. 关于PHP架构师进阶的一些思考
  20. Essential pro angular and asp.net core 笔记

热门文章

  1. redis 加锁与释放锁(分布式锁)
  2. 当心JavaScript奇葩的逗号表达式
  3. python生成二维码图片
  4. QT5 Even 事件
  5. hdu 1081 dp问题:最大子矩阵和
  6. 深度学习笔记(十)Augmentation for small object detection(翻译)
  7. 论文阅读:Offloading Distributed Applications onto SmartNICs using iPipe
  8. jmeter csv Data Set Config 文件中带引号的数据转换问题(自动添加双引号解决办法)
  9. JavaScript插件制作-tab选项卡
  10. Java操作Redis数据