Tween(影片模塊)
附上IFramework 下載地址:IFramewrok
IFramework QQ交流群:782290296
顧名思義,該模塊是對影片的封裝,最核心的類是:
1.Tween (影片類)
2.TweenValue (影片資料類)
最重要的就是這兩個類了,但是為了方便理解,我們從影片提供給我們的使用的api入手,首先有一個靜態擴展類TweenEx
這個類提供了一些影片介面,DoMove(移動坐標),DoMoveX(移動x坐標)等等,用過dotween的小伙伴肯定很了解,沒用過的看著api名字也肯定可以看懂,各個引數的意思其實也非常明顯,初始值,最終值,周期時間,是否卡頓(即沒有浮點數),環境),但是這些api的實作,都是去呼叫DoGoto這個函式,那我們進到里面看,

首先,先去獲取一個影片類,然后去執行他的Config函式和Run函式,最后回傳,那么我們進去里面看從這個api獲取的影片類是什么類,

一個是SingleTween(簡單影片類),另一個是AraayTween(陣列影片類),其實很容易理解,簡單影片類就是一段影片,而陣列影片類則是多段影片,在上面也是有提供多段影片的api的,只是我沒有截圖出來,傳入的最終值是一個陣列,最重要的是,這兩個影片類都是繼承至我們上面提到的核心類(Tween)類,我們先進去看Tween類,

首先,繼承RecyelableObject類,說明這是一個可回收的類,
該類宣告了一些屬性,是否可回收啊,影片方向啊,完成后的回呼,回圈型別等等,這些看不懂的小伙伴可以直接百度翻譯,就不一一解釋了,然后看到SingleTween(簡單影片類),

這個就比較重要了,簡單影片類中,有回圈節點,順序節點,還有一些,當前值,最終值,開始值,回圈次數,變換器,設定回呼,獲取回呼等等,內容太多,這里只講重點,我們剛才說,再DoGoto中,我們獲取到一個影片類之后是先去呼叫他的Config方法,那我們看到Config方法是做了什么,

沒什么特別,實際上就是給這些屬性進行了一些初始化,然后還去執行了Run方法,我們給他看下去

先判斷該影片是否已經被回收,接著給順序節點賦值,其實也不難看懂,設定回圈節點,回圈節點執行的是,Until,知道什么為真,再節點開始時執行OnLoopBegin函式,回傳真了之后執行OnLoopCompelete,然后loop是回圈節點回圈次數,整個順序節點執行完后執行OnTweenFinish,我們只賦值了開始方法和結束方法,并沒有對回圈中的每幀回呼進行賦值,所以這里的OnLoopBegin和OnLoopCompelete都是只會執行一次的,
關于這個回圈節點和順序節點是封裝再CSharp庫中的,因為不細講,感興趣的小伙伴們可以自行去下載原始碼,
因為時影片,所以重點肯定是在他的回圈節點上,不然怎么一直去執行變化呢?,所以我們看到OnLoopBegin方法,

首先他去獲取了一個TweenValue(影片資料類),

宣告了一些相關屬性,不再贅述了,
但是有一個比較重要的地方,他有一個字典

字典中以我們日常需要進行影片的結構體去對應具體的資料處理類,
比如我們可能會經常進行物體的三維坐標移動影片,當我們呼叫DoMove方法時,DoMove方法會去呼叫DoGoto,在我們上面獲取TweenValue時,是需要把這個型別傳進來的,通過TweenValue類中的Get方法,再去獲取對應的具體資料處理類,
繼續看到SingleTween的OnLoopBegin方法,獲取到對應的TweenValue類后去執行Config方法,與SingleTween差不多,也是進行初始化,這里用了Switch,是根據回圈型別進行區別處理,

在最后執行影片資料類的Run函式,

這里寫的很清楚了,當影片未完成,回圈呼叫LoopEvent函式,我們看到LoopEvent,

更新時間,然后呼叫MoveNext,而MoveNext是由我們的子類去實作的,也就是我們剛才所說的具體處理類,
用Vector3的來看

去更新當前的坐標,
其他型別則由其他具體類去實作格子的更新函式,
陣列影片類也是差不多的邏輯,可自行去看代碼,看了這個相信那個也是可以看懂的,差不多就是這樣了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/247591.html
標籤:AI
下一篇:nn.Module介紹(一)
