虛幻引擎制作魔方小游戲——筆記(一)
1.魔方是由3*3*3的立方體矩陣構(gòu)成的,魔方的每次轉(zhuǎn)動是一側(cè)的3*3個塊繞同一個軸轉(zhuǎn)動
?????? 問題1是實現(xiàn)繞軸轉(zhuǎn)動,虛幻引擎提供的功能是塊的位移和自身旋轉(zhuǎn),所以需要設(shè)計一個函數(shù)來實現(xiàn)繞軸旋轉(zhuǎn)。
2.繞軸旋轉(zhuǎn)函數(shù)
?????? (1)選取坐標系
????????虛幻引擎中有“世界坐標”,“相對坐標”兩種坐標系,因為我的方塊陣列在同一個ACTOR里,且其中最中心的塊正好為相對坐標原點,所以選取相對坐標系作為數(shù)學模型店坐標。
?????? ?????? 建立數(shù)學模型,這里我使用了“旋轉(zhuǎn)向量”的概念:

其中(x0,y0)為起初坐標,(x1,y1)為目標坐標,有以下公式:

需要注意的是,此處角度的轉(zhuǎn)動方向是以逆時針為正。
????????因為塊的轉(zhuǎn)動本質(zhì)上就是在二維平面上的轉(zhuǎn)動,所以只需要去掉旋轉(zhuǎn)軸對應的坐標以剩下的兩個坐標去運算即可。(例:若以Y軸為旋轉(zhuǎn)軸,擇選取Z,X坐標為二維坐標運算)
????????這樣的話,我們只需要獲得塊的 起始坐標,中心坐標,旋轉(zhuǎn)角度 即可得到其繞軸旋轉(zhuǎn)后的坐標。這里有一點,當魔方的中心就是坐標原點時,六個面的轉(zhuǎn)動都是圍繞對應二維面的(0,0)坐標旋轉(zhuǎn)的,所以中心坐標就都是確定的了。
(2)函數(shù)實現(xiàn)
????????? 我們可以利用各種數(shù)學運算節(jié)點先編寫運算函數(shù),由于繞三個軸的對應二維平面的坐標字母不一樣,所以我們將上面數(shù)學模型中的X,Y坐標分別改名叫“第一坐標”與“第二坐標”。

由以上函數(shù)計算得到目標第一坐標和目標第二坐標。
?
在此步的計算中,我出過很多錯誤,一直捋不好邏輯,最后我明確了需求,如下:
1.需要實現(xiàn)繞軸旋轉(zhuǎn)
2.需要實現(xiàn)旋轉(zhuǎn)動畫
?
????????其中第一步其實已經(jīng)完成了,而第二步目前我只能想到使用時間軸來實現(xiàn),所以需要用時間軸輸出慢慢變化的角度,控制魔方的塊慢慢旋轉(zhuǎn)。
?
以下是我具體的函數(shù)實現(xiàn):

????????其中大部分內(nèi)容是根據(jù)選取的軸分配第一坐標和第二坐標,并且將計算結(jié)果值賦予對應坐標量。三角函數(shù)計算的部分被我用“節(jié)點”收起來了
?
同時還有一些具體問題如:
1.如何獲得相對坐標:使用節(jié)點“獲取相對變換”
2.如何改變轉(zhuǎn)向:給角度乘上負號
3.如何搭配時間軸:如下

其中的數(shù)組是所指定旋轉(zhuǎn)面包含的3*3塊的數(shù)組。
為配合時間軸,函數(shù)的“初始坐標”在時間軸執(zhí)行期間應該要都是一樣的值,所以要在時間軸之前就獲得初始坐標。(這點我糾結(jié)了好久)
?
(3)實現(xiàn)一面9個塊的旋轉(zhuǎn)
由上面的藍圖就可以猜到我用了數(shù)組,其中具體的步驟包含比如,生成3*3*3個立方塊,將它們加入數(shù)組;通過遍歷數(shù)組篩選出需要被旋轉(zhuǎn)的塊,放入新數(shù)組;遍歷新數(shù)組,另每一個塊都旋轉(zhuǎn)。
其中,生成魔方的代碼如下:

篩選塊的代碼如下:

通過如上的代碼,我們就實現(xiàn)了生成魔方,且可以控制其特定面旋轉(zhuǎn)。
?
其余還有一些細節(jié),比如:
按鍵控制,我是采用自定義事件+“開啟字符串”的方式,指定對應操作(這部分寫在actor里),然后在自己新建的pawn里添加按鍵操作(這里需要藍圖通信):



其中可以看到我在自定義事件被觸發(fā)后還有一段代碼,其分別是為了實現(xiàn)清空數(shù)組和避免連續(xù)按按鍵產(chǎn)生干擾。
?