U3D 动画帧事件问题
測試版本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[10];int idx = 1;int idxLast;AudioSource[] attackSound;// Use this for initializationvoid Start () {animator = GetComponent<Animator> ();System.Random rand = new System.Random ((int)Time.time);randArr [0] = 0;for(int i=1; i<10; i++){randArr [i] = rand.Next (0, 10);Debug.Log (randArr [i]);}attackSound = GetComponents<AudioSource> ();}// Update is called once per framevoid Update () {}void OnAttackEvent(){int iSound = randArr [idxLast] > 4 ? 1 : 0; //播放當前動畫集的音效,注意idxLast attackSound[iSound].Play ();animator.SetInteger ("attackId", randArr[idx]);//設置下一個動畫集(播放完本動畫集后才會開始播放下一動畫集,因為有has exit time)idxLast = idx;idx = (idx + 1) % 10;} }結果發現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曲線上的值。這樣可以做許多事情。
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的U3D 动画帧事件问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】汇编 代码段数据段堆区栈区
- 下一篇: U3D杂记