原地址:http://www.cnblogs.com/ybgame/archive/2013/02/21/2920009.htmlhtml
如何導入一個模型,導入的模型在unity3d的project面板中是怎樣顯示的?包含什麼內容?如何加載到場景中?怎樣去控制它?模型和動畫之間的關係?web
http://usa.autodesk.com/fbx/算法
若是你有一個從高精度多邊形版本生成的帶法線貼圖的角色,你應該以180度的平滑角度(Smoothing angel)導入此角色的遊戲質量版本。這將防止因爲切線切割在光照中產生的奇怪的接縫。若是在應用了這些設置後仍然存在接縫,啓用在UV接縫處分割切線選項(Split tangents across UV seams)。編輯器
【動畫導入】ide
若是想播放一個簡單的動畫,可使用Animation.Play;
若是想在動畫之間交叉淡入,可使用Animation.CrossFade;
若是想改變更畫模式(循環,一次,乒乓),能夠改變更畫導入設置裏面的動畫幀的WrapMode,或者在運行時改變AnimationState.wrapMode的值;
AnimationState能夠用於改變更畫的層,修改播放速度,而且直接控制融合與混合。工具
1 function Start () { 2 // Set all animations to loop 3 animation.wrapMode = WrapMode.Loop; 4 // except shooting 5 animation["shoot"].wrapMode = WrapMode.Once; 6 7 // Put idle and walk into lower layers (The default layer is always 0) 8 // This will do two things 9 // - Since shoot and idle/walk are in different layers they will not affect 10 // each other's playback when calling CrossFade. 11 // - Since shoot is in a higher layer, the animation will replace idle/walk 12 // animations when faded in. 13 animation["shoot"].layer = 1; 14 15 // Stop animations that are already playing 16 //(In case user forgot to disable play automatically) 17 animation.Stop(); 18 } 19 20 function Update () { 21 // Based on the key that is pressed, 22 // play the walk animation or the idle animation 23 if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1) 24 animation.CrossFade("walk"); 25 else 26 animation.CrossFade("idle"); 27 28 // Shoot 29 if (Input.GetButtonDown ("Fire1")) 30 animation.CrossFade("shoot"); 31 }
Animation Playback and Sampling 動畫播放和取樣:
取樣這個詞可能不大好理解,取樣在Unity裏面是涉及到渲染的一個術語,就是對像素取樣來進行綜合運算,咱們的動畫是在不斷運動的,將動畫當前的運動狀態提取出來,並渲染到屏幕上,這是我理解的取樣。
咱們在3ds Max或者Maya等模型編輯工具中編輯一個動畫,咱們按照某個幀速率(FPS)來建立這個動畫,在動畫被導入到U3D的時候,這個幀速率也會被導入,因此會跟編輯器的速率保持一致。
但咱們遊戲的運行幀速率並不穩定,可能有硬件的緣由或者要渲染的對象,處理的邏輯複雜度不同,而致使的幀速率不穩定,若是咱們按照它設定的幀率來播放,動畫就會一卡一卡的。Unity是在變化的幀頻中對動畫進行取樣,而不在製做時的幀頻。3D電腦圖形動畫不是由分散的動畫組成,而是連續的曲線。這些曲線可讓咱們在任什麼時候間點取樣,而不僅是對應某一個原始幀的時間點。這樣當咱們的電腦比較快的時候,動畫將會更加地平滑和流暢。
對於大多數的實際應用,事實上Unity對變化幀速的採樣不是咱們須要關切的,然而,若是你的某個遊戲邏輯依賴於動畫變換或屬性的動畫在一個很是特殊的配置,那必須知道這一點。例如,若是有一個動畫是把一個物體30幀內從0旋轉到180度,想從代碼中知道當它已達到了一半,你不能寫一段條件語句來檢查如今旋轉值是否是90度。由於 Unity 依照遊戲的變化速率來對動畫取樣,它可能在旋轉快到90度時進行取樣,或恰好過90度的時候取樣。當在一個動畫指定一個點到達時,須要通知, 應該使用AnimationEvent來代替。
還要注意的變化幀速率採樣的結果,一個使用WrapMode.Once模式播放的動畫的採樣不必定是精確的最後一幀。在遊戲中頗有多是恰好結束前的某一幀,在下一幀時間可能超過動畫的長度,因此它被禁用,而再也不採樣。若是須要動畫的最後一幀取樣精確,你可使用WrapMode.ClampForever。
如在這種狀況下,動畫在這種狀況下,動畫將保持無限取樣最後一幀,直到你中止動畫。