测试版本U3D5.4。

1,为一个模型导入外部动画。为动画剪辑attack在某帧添加event,事件为 public void OnAttackEvent(){},函数体不做任何事情。

结果发现,在动画帧末尾添加事件,播放时两个动画的过渡效果没有了,去掉帧事件后正常过渡。

在动画集开始处(不超过33%)设置帧事件,不影响动画的过渡。

看来U3D的帧事件相当粗糙,不能精确的在动画集末尾帧添加事件而又不影响本动画集和下一动画集的过渡。

2,去掉has exit time,并在上面的帧事件中设置:

using UnityEngine;
using System.Collections;
using UnityEditor; public class testAnimEvent : MonoBehaviour { Animator animator;
int[] randArr = new int[];
int idx = ;
int idxLast;
AudioSource[] attackSound;
// Use this for initialization
void Start () {
animator = GetComponent<Animator> ();
System.Random rand = new System.Random ((int)Time.time);
randArr [] = ;
for(int i=; i<; i++){
randArr [i] = rand.Next (, );
Debug.Log (randArr [i]);
}
attackSound = GetComponents<AudioSource> ();
} // Update is called once per frame
void Update () { } void OnAttackEvent(){
int iSound = randArr [idxLast] > ? : ; //播放当前动画集的音效,注意idxLast
attackSound[iSound].Play ();
animator.SetInteger ("attackId", randArr[idx]);//设置下一个动画集(播放完本动画集后才会开始播放下一动画集,因为有has exit time)
idxLast = idx; idx = (idx + ) % ;
}
}

结果发现animator.SetInteger ("attackId", randArr[idx]);并不会立即打断当前播放而进入下一个要求的动画集。它要等到本动画集播放完了才进行切换。

3,复制Assets\Characters\ThirdPersonCharacter\Animation下的HumanoidRun.fbx到另一工程下,通过U3D察看此文件,发现不能用,如图1,正常情况应该如图2。原来是没考meta文件造成的,一般情况下meta文件没什么用,这里却例外了,可能这个文件有特殊性,不深究了。

         

      图1                    图2

4,不同人形模型间的动画可以通用,注意要在动画导入设置里rig页设置为: Animation Type : Humaniod才行。

这是最简单的动画集复用。一个人形模型可以通过引用其它人形模型的AnimationController来直接播放不属于自己的动画集和状态机,这就是动画集的retarget

5,为导入的动画使用curves : 这样状态机运行时就会从曲线上采样作为speed的值。还可以在脚本中通过animator.GetFloat("speed")来获取任意时刻speed曲线上的值。这样可以做许多事情。

U3D 动画帧事件问题的更多相关文章

  1. Unity 3D 动画帧事件

    前几天在项目开发中碰到一个这样的需求,RPG游戏中,特效和动画播放不同步的.假如主角在攻击NPC时,先实例化特效,后播放动画.动画毕竟是有一个时间长度的.等到动画播放攻击挥刀的那一瞬间时,特效可能早就 ...

  2. CocoStudio基础教程(6)使用CocoStudio编辑帧事件并关联到程序

    1.概述 帧事件也是新加入的功能.这篇中我们将看到如何使用它.我们将上篇中制作的动画稍加修改. 2.用途与原理 首先介绍一下帧事件.正如其名:一个与帧相关联的事件. 为什么要这么做呢?首先没人想做一大 ...

  3. [UWP]缓存Lottie动画帧

    在上一篇博文<[UWP]在UWP平台中使用Lottie动画>中我简单介绍了一下LottieUWP项目以及如何使用它呈现Lottie动画,这篇文章里我们来讲点进阶的东西--缓存Lottie动 ...

  4. requestAnimationFrame ---- 请求动画帧。

    window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画.该方法需要传入一个回调函数作为参数,该回调函数会 ...

  5. CSS3的自定义动画帧

    CSS3新增的动画帧非常绚丽,可以简单实现一些动画效果,目前除IE外各大主流浏览器都支持 本文演示三个:transform: scale3d(x, y, z)-缩放;.transform: trans ...

  6. 【转】CSS3动画帧数科学计算法

    本文来源于:财付通TID 原作者:bboy90 总结都浓缩在这个工具里了,想知道工具的地址或想窥探工具诞生的趣事请往下看 . —————————————————————–     华丽丽的开篇     ...

  7. Android设备 cocos2dx 骨骼动画注册事件播放音效,退到后台再返回黑屏问题

    最近遇到一个cocos2dx 骨骼动画注册事件播放音效,在骨骼动画播放的时候,按HOME键退到桌面,再次打开游戏的时候,会黑屏. 解决办法如下,可能不是太完美,至少解决了大部分问题. 1.在org.c ...

  8. [WPF] 动画Completed事件里获取执行该动画的UI对象

    原文:[WPF] 动画Completed事件里获取执行该动画的UI对象 昨天群里有位童鞋提出如何在动画完成事件Completed里获取到执行该动画的UI对象. WPF里动画的Completed的本身并 ...

  9. 关于v4包的Fragment过渡动画的事件监听无响应问题解决

    项目中部分功能模块采用了单Activity+多Fragment模式,当Fragment切换时,需要在过渡动画执行完后做一些操作,通常就是在自己封装的FragmentBase中重写onCreateAni ...

随机推荐

  1. Ajax最详细的参数解析和场景应用

    4.1.定义和用法 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 J ...

  2. 十五天精通WCF——第三天 client如何知道server提供的功能清单

     通常我们去大保健的时候,都会找姑娘问一下这里能提供什么服务,什么价格,这时候可能姑娘会跟你口述一些服务或者提供一份服务清单,这样的话大 家就可以做到童嫂无欺,这样一份活生生的例子,在wcf中同样是一 ...

  3. SQLServer中ISNULL、NULLIF和CONVERT函数

    create view sss as(select ISNULL(operate_time, CONVERT(VARCHAR(20),create_time,120)) time from s_pro ...

  4. Access 2003 中自定义菜单栏

    在Access中如何用自定义的菜单代替Access自带的菜单,现在做一个简单的介绍: 1.打开您做的Access数据库: 2.单击工具栏,选择“自定义…”: 3.在“自定义”窗口,单击“工具栏”选项卡 ...

  5. 《java JDK7 学习笔记》课后练习题3

    1.如果有以下的程序代码:int number;System.out.println(number);以下描述何者正确?A.执行时显示0B.执行时显示随机数字C.执行时出现错误D.编译失败 2.如果有 ...

  6. MySQL 调优基础(五) Linux网络

    1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.而实际的Linux网络层协议是参照了OSI标准,但 ...

  7. jasper 常用知识点总结

    1.应用: 列头 "YYYY-MM" 格式转化为 "MM YYYY"格式, eg : Date1 = 2014-11 new java.text.SimpleD ...

  8. centos7系统下安装nodejs开发环境

    1)安装基础工具(if not exists) yum install -y net telnet tools vim wget ntp 2)同步系统时间(if necessary) ntpdate ...

  9. android Timer使用方法

    Timer属性:http://www.apihome.cn/api/java/Timer.html 声明创建: private Timer mTimer; protected void onCreat ...

  10. Python 变量类型

    Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...