Unity3D之Mecanim動畫系統學習筆記(十一):高級功能應用


動作游戲

還記得讀書的時候熬夜打《波斯王子》的時光,我們的王子通過跳躍穿過牆壁的小洞、在高層建築上進行攀爬和跳躍,還有在操作失誤掉下高樓和觸發必死機關后使用時之沙的時光倒流功能回歸死亡之前的開掛技能。

而現在這些功能使用Unity3D的Mecanim都可以非常簡單的實現了!

這篇筆記主要記錄下Mecanim的3個高級功能:

  1. Animation Curve:可以根據動畫的運行時間自定義一條曲線,在播放動畫時可以獲得這條曲線對應的值,可以實現跳躍穿過小洞的功能;
  2. Target Match:匹配一個預先定義好的點進行動畫播放,可以實現人物攀爬的功能;
  3. Animation Record:可以對動畫進行錄制,然后可以播放錄制好的動畫,可以實現時之沙的時光倒流功能;

可以說Unity3D現在已經具備了開發一款媲美國際大廠的動作游戲的能力了。

Animation Curve

這里我們直接使用官網給出的示例,打開場景Scale Capsule:

運行游戲,我們發現此時人物是不能通過跳躍穿過牆上的小孔的:

原因很簡單,人物的膠囊碰撞體比小孔要大。當我們勾選了右上角的Apply Scale之后,再跳躍試試看:

此時我們發現當人物跳躍時,膠囊碰撞體就會進行縮小,而我們的人物就可以鑽過這個小洞了,在跳躍之后膠囊體會進行恢復。

我們找到動畫文件Dive,就可以看到其設置了兩個Curve:

而其中的ScaleOffsetCapsule就是用來控制膠囊體縮放的曲線,我們可以發現其呈現了1->0->1的一個區間。

然后我們看看參數的設置:

參數必須是Float類型同時名稱必須和動畫文件中的Curve名稱一致,這樣當我們播放跳躍動畫時該參數就會根據預設好的曲線來取值了,注意該參數后方的輸入框已經禁用了,不能輸入。

最后我們看下腳本ScaleCapsule的實現:

通過每幀獲取參數的值來實現跳躍的碰撞體變小的功能。

Target Match

核心是使用到了Animator的MatchTarget方法,幫助如下:

http://docs.unity3d.com/ScriptReference/Animator.MatchTarget.html

這里我們還是直接使用官網給出的示例,打開場景Target Match:

我們發現在箱子上方已經做好了一個目標點,我們的人物的右手會匹配到這個點進行動畫播放。

需要注意的是,使用MatchTarget的動畫必須位於Base Layer層。Match Target會將我們人物的一個部位的位置和目標點的位置進行插值來移動我們人物,結果就是可以通過一個指定高度的攀爬動畫來匹配任意高度的攀爬。

我們看下調用的腳本:

 1 // Update is called once per frame
 2 void Update () 
 3 {
 4 
 5     if (animator)
 6     {
 7         AnimatorStateInfo state = animator.GetCurrentAnimatorStateInfo(0);
 8 
 9         if (Input.GetButton("Fire1")) animator.SetBool("Jump", true);
10 
11         if (state.IsName("Base Layer.JumpUp") || state.IsName("Base Layer.FullJump")) 
12         {
13             animator.SetBool("Jump", false);
14                             
15             animator.MatchTarget(RightHand.position, RightHand.rotation, AvatarTarget.RightHand, new MatchTargetWeightMask(new Vector3(1, 1, 1), 0), animator.GetFloat("MatchStart"), animator.GetFloat("MatchEnd"));
16             hasJumped = true;
17         }
18 
19         if (hasJumped && state.normalizedTime > 1.2)
20         {
21             hasJumped = false;
22             Application.LoadLevel(0);
23         }
24     }
25 }

Animation Record

Unity3D的Animator類為我們提供了4個方法用於錄制和播放動畫:

同時我們也可以通過訪問Animator提供的一些屬性來了解動畫錄制的一些信息:

使用比較簡單就不做示例展示了,需要注意的時,回放錄制的動畫時人物會回到開始錄制的坐標點,而不是在當前坐標點開始播放。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM