huase国产在线视频,3p在线视频,中文自拍日韩在线播放视频免费
當前位置: 主頁 > 其它 > 日志 >

Unity3D中角色的動畫腳本的編寫(三)

來源: 瀏覽數(shù):
責任編輯:wyb314
時間:2012-11-16 11:00

[導讀]

 在上一篇,我們具體的講解了有關動畫的融合,也提到了有關動畫狀態(tài)的權重問題。那么這次,我來以一個例子的形式來向大家講解動畫的疊加,或許會涉及到多方面的知識,我力求一次講清。好了,我們開始吧!

        首先我們必須新建一個工程,我取名為:AnimaitonTestTuriol。我們需要一個模型,這里我剛好從從官方的
CharacterAnimation這個工程中摳出了一個:Soldier。然后我將其導入到了次工程文件夾下面的,然后簡單的錯了一個場景,取名為:AnimationAdditive,下圖就是我們的工程預覽:

然后我們新建一個名為CustomScripts的文件夾,用于存放我們接下來要建立的腳本文件。
        我們此次的目的是要能夠在腳本中熟練運用動畫的疊加方法。那么什么是動畫的疊加呢?所謂動畫的疊加,就是指我們可以在任意動畫上面來疊加動畫效果。這就非常棒了,因為這項功能可以削減美術為游戲角色創(chuàng)建的動畫片段的數(shù)量,既減小了工程所占用空間的大小,又對簡化了我們的代碼編寫。官方舉了一個例子,大體上是這樣的:加入我們有一個角色,具備基本的“站立”,“跑步”,“左傾”,“右傾”的動畫,我們還想讓其在跑步圖中轉身時有一種傾斜的效果,比如左轉彎時不只是播放跑步的動畫,而且還疊加了一個左傾的(或者右傾的)動畫。如果我們不用疊加,那么我們勢必會多創(chuàng)建兩個動畫效果:“跑步時左傾”,“跑步時右傾”。一旦有了動畫的疊加,我們根本就不需要去做這兩個動畫片段,厲害吧!那么我們該怎么去實現(xiàn)這個呢?
        我們首先要知道怎么去疊加動畫,為此,我們必須了解一下這個屬性:AnimationState.blendMode,即混合模式。此屬性的返回值類型為AnimationBlendMode ,我們看文檔:

這里只有兩個變量:Blend和Additive。在默認狀態(tài)下,Animation組件所管理的每個動畫狀態(tài)的混合模式都是:
AnimationBlendMode.Blend,即融合模式,我們只有在程序中才能對其進行相應的修改。如果你將此動畫模式修改成了Additive,那么你的這個動畫狀態(tài)就具備疊加到其他動畫上的功能了,此時你只需動態(tài)的調(diào)節(jié)這兩個動畫狀態(tài)之間的權重就可以產(chǎn)生相應的疊加動畫了。下面我來編寫一個試驗性的腳本來證明我們的猜想,我為這個腳本取名為:
AdditiveAnimaitonTest1,代碼如下: 
using UnityEngine;
using System.Collections;
public class AdditiveAnimaitonTest1 : MonoBehaviour {
 
        private AnimationState***n;
        private AnimationState leanLeft;
        
void Start () {
        animation.wrapMode = WrapMode.Loop;//聲明各動畫狀態(tài)的播放方式為循環(huán)模式
 
       ***n = animation["***nSlow"];//實例化成員變量
        leanLeft = animation["leanLeft"];
 
        if ***n)
        {
           ***n.weight = 1f;//設定動畫狀***n的混合權重為1
           ***n.layer = 10;//讓這個動畫狀態(tài)的layer為最高層10
           ***n.enabled = ***e;//啟用此動畫狀態(tài)
        }
 
        if (leanLeft)
        {
            leanLeft.weight = 1f;
            leanLeft.layer = 10;//讓此動畫狀態(tài)***n為同一層,又由于此動畫狀體的混合權重也為1,那么其獲得動畫混合權重的幾率***n一樣
            leanLeft.enabled = ***e;//啟用此動畫狀態(tài)
            leanLeft.blendMode = AnimationBlendMode.Additive;//將此動畫狀態(tài)設定為疊加模式
        }
      }
    
    void OnGUI() 
    {
 
        GUILayout.BeginHorizontal();//利用拖動條來控制每種動畫狀體的權重
 
       ***n.weight = GUILayout.VerticalSlider***n.weight,1.0f,0.0f);
        
        leanLeft.weight = GUILayout.VerticalSlider(leanLeft.weight, 1.0f, 0.0f);
 
        GUILayout.EndHorizontal();
      
    }
}
上面的代碼比較少,可是里面所涉及到的內(nèi)容卻并不那么容易理解。因為這次我們不是靠明顯代碼來播放動畫,而是依靠調(diào)節(jié)權重來實現(xiàn)的。為了理解這個方法的原理,我們必須明白一個結論:假如一個動畫狀態(tài)被激活了,例如:animation["idle"].enable = ***e ,那么此動畫就會處于播放狀態(tài)(此時沒有執(zhí)行類似:
animation.Play或者animation.CrossFade之類的語句)。不信的話你可以在上面的Start()函數(shù)中寫下以下語句:
if(animation.IsPlaying("idle")){
       Debug.Log("idle is***nning!");
 }
if(animation.IsPlaying("leanLeft ")){
       Debug.Log(" leanLeft  is***nning!");
 }
我相信第二個if語句中的Debug會被打印出來,而第一個則不會,不信你試試。
好了,我們運行一下游戲吧!

我們試著調(diào)節(jié)一下Game視圖中的垂直滾動條,可以發(fā)現(xiàn),動畫的效果改變了:

我想讀者一定按捺不住現(xiàn)在的心情了。我們成功的將左傾動畫與跑步動畫給疊加起來了,雖然例子很簡單,但是我想我們應該可以疊加更多的動畫了。希望讀者能夠認真體會。還有一點,官方CharacterAnimation工程中的第四個場景中的代碼完整的展現(xiàn)了動畫疊加的精髓,我的這個Solider就是從這個場景中摳出來的,感興趣的讀者不妨分析一下里面的代碼,保證獲益頗豐。如對本篇難以理解的不讓留個言,或者加qq:1597725465,本人一定親囊相受。下一篇,我準備介紹一下“動畫混合”,他是可以將某個動畫片段加到角色的某個部位的,非常神奇,但也有一些限制因素。敬請期待我的下一篇文章! 

免責聲明:本文僅代表作者個人觀點,與納金網(wǎng)無關。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實,對本文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內(nèi)容。



  • TAGS:
  • 網(wǎng)友評論

    您需要登錄后才可以發(fā)帖 登錄 | 立即注冊

    關閉

    全部評論:0條

    聯(lián)系方式

    服務熱線:15059788121 / 13489872927 / 15959158412

    換鏈QQ:943169942

    電子郵箱:943169942@qq.com

    聯(lián)系地址:福建省晉江國際工業(yè)設計園5號樓

    福建省信芯長盈科技有限公司 閩ICP備2021016425號-2/3

    Copyright trusteddivorcelawyers.com 2008-2025 All Rights Reserved

    開展“凈網(wǎng)2019"專項行動,堅決保障網(wǎng)絡空間清朗

    IOS版

    安卓版

    官網(wǎng)認證