Unity 让物体同时播放两种动画
来源:互联网 发布:mp3拼接软件 编辑:程序博客网 时间:2024/06/05 13:01
在用Unity开发工程中,会遇到需要让一个物体同时播放两种动画的情况,举个简单的例子: 一只小鸟,这只小鸟会拍翅膀,这只小鸟也会按一定的轨迹飞行。 实现这个需求有几种思路:
1. 用动画控制器控制小鸟拍翅膀的动画,编写脚本控制小鸟的飞行轨迹;
2. 在一个动画中同时K上 拍翅膀相关的帧 和 运动轨迹相关的帧;
3. 给这只小鸟加一个父节点,小鸟自身的控制器会控制鸟拍翅膀的动画,其父节点上挂一个控制器,用来控制器运动轨迹;
4. 采用动画混合层的方式,由小鸟自身的动画控制器 直接控制 小鸟拍翅膀及其运动轨迹的动画。
本文将会对第 4 种思路进行简要介绍。
1)新建一个Unity工程,导入相关资源,图中的“Bird”已经挂好动画控制器,并且其“BaseLayer” (第0层)中新建一个 拍翅膀动画 => “Fly”动画。此时,小鸟已经具备拍翅膀的表现了。
接着,我们需要新建一个动画层,来实现其飞行轨迹动画的叠加:
2). 点击下图中左上角的 “ + ”号,下方便会出现一个新的层 “New Layer ” 也就是动画层1了(BaseLayer 是动画层0),此时可以对这个层重命名。
3) 在新建的层中点击右上角的设置按钮 ,打开该层的设置面板,在设置面板中把 weight 的值 设置成1 (当weight 为0 时,该层的动画不起作用,随着weight的值增大,动画权重增大(类似于动画速度增加),当weight为1时,表示该层中的动画均为正常速度播放)。
4)在该层中K上控制小鸟移动的动画 => “Move"。
此时,基本功能已经实现,启动Unity 你便会发现,物体已经具备两种动画表现。
在这里可以扩展一些知识, 如何单独停止第一层(即新建层)动画,并在一定时候后继续该层在停止时刻的动画? ----有两种方法可以供大家参考。
第一种方法也是常用的方法是 用代码设置该层的权重 weight =0 。新建一个脚本“Bird” ,挂载到小鸟物体上,加入如下代码:
当按下键盘上按键”Q“时,新建层的动画会停止,只保留”BaseLayer“层的动画。
这种方向可以有效地停止掉骨骼动画。 像CS类射击游戏中,通过混合动画,Base层中主要控制角色手部开枪射击等动画,在新建的混合层中控制脚步移动的动画,这种情况可以用上述的方法停止掉新建的混合动画层。 然而,对”移动旋转缩放 “ 类动画不能用这种方法!
本文需求中小鸟的这种 ”拍翅膀“ + ”拍翅膀“ 组合而成的动画,不能用设置权重weight的方式去停止动画 , 这是因为当你把新建的混合层动画权重设置成0时,物体会回到移动动画第一帧的位置,并不是在原点待命!
对于”骨骼动画“ + ”移动动画“ 这类的,我们可以这样解决:
1)在新建的混合层中添加一个空的动画State ,命名可随意为,并把write defaults 这个选项勾去掉;
2)在常用于播放动画的 animator.Play() 方法中有5个重载,其中有一个重载方法是可以自行决定动画从哪里开始播放的,调用此方法我们需要知道两个关键的数值:
stateNameHash 和 normalizedTime。
3)在停止动画前 先获取 ”Move“ 动画当前已经播放了多少(该值为0 到1 ,1 为100%,0.1为10%),即“normalizedTime”。获取代码如下,相关解释已经备注在代码里:
4)获取混合层中当前动画的 名字所对应的哈希值 => nameHash.
5)此时准备工作已经完成,下面贴出全部代码。小鸟飞行过程中按下 键盘”W“键,小鸟会保持“拍翅膀”状态 原地停止3秒,3秒后继续飞行。
其实在物体有固定移动路线时,给物体添加一个父节点,物体自身K骨骼动画,父节点K带动物体移动的动画也是可行的,停掉移动动画只需要禁用父节点的动画控制器即可,再次启动也就是把父节点的控制器再次启动,动画也能继承停止时刻的状态继续播放,在逻辑控制上简单很多,但是随意给物体添加一个父节点有时有打乱物体之间的结构规律,所以并不推荐这样做。
到此,功能已基本实现。
(有什么错误的地方也请各位大大不吝指出~~~)
- Unity 让物体同时播放两种动画
- ios同时播放两种音频,
- 同时播放两首歌曲
- unity让物体鼠标平滑移动物体
- Unity 多物体联动动画
- unity 查找物体的写法 和 设置动画在某各地方倒着播放
- unity手游开发--如何得到当前物体播放的动画
- unity如何播放父级的父级物体所绑定的动画功能
- unity改变物体大小的两种方式
- 【unity】Unity 手指滑动让物体旋转
- unity播放开始动画
- 播放动画的两种方法
- 移动同时旋转播放动画
- 寻找标签内的物体播放动画
- 在创建的物体上播放动画
- android 同一个界面同时实现两种动画相对运动
- Unity手动控制动画播放
- Unity动画播放方式区别
- JAXBContext实体类与xml相互转化
- SCRAPY 1.1 (FOR PYTHON3) 的安装步骤 (UBUNTU 15.10)
- Java并发系列-26、剖析同步器
- 这篇文章记录平时学习、项目中遇到的问题(未解决的居多)
- 初学者对于UIScrollView类似于新闻头条的标题栏滚动效果
- Unity 让物体同时播放两种动画
- cocos2d-x3.7 在Windows下打包Android平台APK
- Android 如何让EditText不自动获取焦点
- PAT_乙级 1033 旧键盘打字
- Java 性能调优 性能优化策略
- docker安装搭建
- android eclipse 脚本打包问题
- Bigdecimal的加减乘除
- 信息熵---信息不确定度