Unity動畫系統 動態新增動畫事件

2021-08-09 02:38:14 字數 1092 閱讀 6289

聽起來是不是很簡單?年輕!我一開始也是這麼認為的,後來發現這個專案使用的是dll類庫。**結構如下圖:

其中,rowingui是控制ui的指令碼,game是遊戲介面邏輯。game中包含rowingui的引用,可以訪問到rowingui中的類。

我們的ui使用的是這樣的結構,直接把3d模型放到ui介面來顯示。

這就造成了乙個問題,模型的動畫控制是寫在game類庫中的,想在ui介面控制模型動畫,必須訪問到game.dll中的類,但rowingui中並沒有引用game.dll,怎麼辦?

原來的專案中採用的是sendmessage方法,既在ui介面中找到模型物體,直接sendmessage來呼叫相應的指令碼函式。但現在我導師嫌這個sendmessage效率太低,讓我改進一下,我是有點懵逼的。

在我苦思冥想了乙個下午之後,我問導師,在rowingui中新增game.dll的引用,這樣不就解決了嗎?

天真!引用是不能亂新增的,a中有b的引用,那就意味著編譯了b,a才能正常編譯。如果你a引用b,b又引用a,不就造成了死迴圈嗎?

得到了如下回答:

專案的引用右鍵新增引用,新增解決方案內的專案。

emmmm......並沒有解決我的問題,追問了一下,得到如下回答:

膜拜這位大佬,他說的太精闢了!我是完全聽不懂啊。

我這裡選擇通過委託和事件來實現跨類訪問,關於委託和事件的使用這裡就不贅述了,直接上重頭戲——動畫事件的新增。

通過**新增動畫事件:

public void addanimationevent()

首先我們要得到當前動畫片段,animator是動畫狀態機,

getcurrentanimatorclipinfo是用來獲取指定動畫層的所有clips,這裡獲取第0層的第0個動畫片段,既缺省動畫。

roleevent是掛在物體身上的指令碼中的函式,我們需要提前寫好,在這裡以字串的形式來賦值。

Unity舊版動畫系統

一 layer和weight 的概念 動畫層和layermask沒有關係,它是乙個只和動畫有關的東西。這也是unity本身的一套東西,別的引擎上沒有層的概念,正因為這個動畫系統在unity裡面很靈活,有人說已經有animator,沒有人用舊版的動畫系統了,其實不然,animator就像一套編好的動畫...

Unity動畫事件

動畫事件新增 var clip new animationclip clip,動畫剪輯儲存基於動畫的關鍵幀。這裡新建動畫剪輯 clip.setcurve typeof material color.a animationcurve.easeinout 0,1,5,0 給動畫指定曲線乙個特殊的屬性。s...

Cocos新增動畫

studio 匯出使用大圖 和 使用全部大圖 匯出使用大圖 生成 png plist和畫布對應的json 裡載入畫布使用了同樣的方式 將大圖切開存入緩衝池 cc.spriteframecache.addspriteframes res.calcplist 逐幀動畫 將多張存入陣列 然後使用 var ...