- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
教程:为“原状”类人动画编写根运动脚本 (Scripting Root Motion)
有时您的动画保持为“原状”,这意味着,如果您将其放入场景中,它不会移动上面的角色。换言之,动画未包含“根运动”。为此,我们可以使用脚本来修改根运动。要把所有一切综合到一起,请遵循以下步骤(请注意,有多种不同的方式可达到相同结果,这只是其中的一种方法)。
- 打开包含原状动画的 FBX 文件的检视器,然后转至动画 (Animation) 标签。
- 确保肌肉线条 (Muscle Definition) 已设为您打算控制的 Avatar(假设该 avatar 的名称是 Dude,且已被添加到层级视图 (Hierarchy View))。
- 从可用片段中选择动画片段。
- 确保正确对齐循环姿势 (Loop Pose)(它旁边的灯为绿色),并点击循环姿势复选框。
- 在动画查看器中预览动画,以确保动画开始和结束处流畅对齐,角色“原地”移动
- 在动画片段上创建一条曲线,该曲线控制角色速度(您可以通过动画导入检视器 (Animation Import inspector)曲线 (Curves)-> + 添加曲线)
- 为该曲线取一个有意义的名称,比如 "Runspeed"
- 创建一个新动画器控制器 (Animator Controller),(让我们称之为 RootMotionController)
- 将需要的动画片段投入该控制器,这样会创建一种以该动画为名的状态(比如 Run)
- 向与曲线同名(在这种情况下,名称为 "Runspeed")的控制器 (Controller) 添加一个参数
- 在层级视图 (Hierarchy) 中选择角色 Dude,该层级视图的检视器已包含一个动画器 (Animator) 组件。
- 将 RootMotionController 拖到动画器 (Animator) 的控制器 (Controller) 属性上
- 如果现在按“播放”,您会看到 "Dude" 在原地跑步
- 最后,为控制运动,我们需要创建一个脚本 (RootMotionScript.cs),该脚本实现
OnAnimatorMove
回调。
using UnityEngine; using System.Collections; [RequireComponent(typeof(Animator))] public class RootMotionScript :MonoBehaviour { void OnAnimatorMove() { Animator animator = GetComponent<Animator>(); if (animator) { Vector3 newPosition = transform.position; newPosition.z += animator.GetFloat("Runspeed") * Time.deltaTime; transform.position = newPosition; } } }
- 将 RootMotionScript.cs 附加到 "Dude"
- 请注意,动画器组件检测到一个含有
OnAnimatorMove
的脚本,应用根运动 (Apply Root Motion) 属性显示为“由脚本处理 (Handled by Script)”
- 现在您会看到角色以指定的速度移动。
(返回 Mecanim 简介)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论