虚幻引擎制作魔方小游戏——笔记(一)
1.魔方是由3*3*3的立方体矩阵构成的,魔方的每次转动是一侧的3*3个块绕同一个轴转动
问题1是实现绕轴转动,虚幻引擎提供的功能是块的位移和自身旋转,所以需要设计一个函数来实现绕轴旋转。
2.绕轴旋转函数
(1)选取坐标系
虚幻引擎中有“世界坐标”,“相对坐标”两种坐标系,因为我的方块阵列在同一个ACTOR里,且其中最中心的块正好为相对坐标原点,所以选取相对坐标系作为数学模型店坐标。
建立数学模型,这里我使用了“旋转向量”的概念:

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

需要注意的是,此处角度的转动方向是以逆时针为正。
因为块的转动本质上就是在二维平面上的转动,所以只需要去掉旋转轴对应的坐标以剩下的两个坐标去运算即可。(例:若以Y轴为旋转轴,择选取Z,X坐标为二维坐标运算)
这样的话,我们只需要获得块的 起始坐标,中心坐标,旋转角度 即可得到其绕轴旋转后的坐标。这里有一点,当魔方的中心就是坐标原点时,六个面的转动都是围绕对应二维面的(0,0)坐标旋转的,所以中心坐标就都是确定的了。
(2)函数实现
我们可以利用各种数学运算节点先编写运算函数,由于绕三个轴的对应二维平面的坐标字母不一样,所以我们将上面数学模型中的X,Y坐标分别改名叫“第一坐标”与“第二坐标”。

由以上函数计算得到目标第一坐标和目标第二坐标。
在此步的计算中,我出过很多错误,一直捋不好逻辑,最后我明确了需求,如下:
1.需要实现绕轴旋转
2.需要实现旋转动画
其中第一步其实已经完成了,而第二步目前我只能想到使用时间轴来实现,所以需要用时间轴输出慢慢变化的角度,控制魔方的块慢慢旋转。
以下是我具体的函数实现:

其中大部分内容是根据选取的轴分配第一坐标和第二坐标,并且将计算结果值赋予对应坐标量。三角函数计算的部分被我用“节点”收起来了
同时还有一些具体问题如:
1.如何获得相对坐标:使用节点“获取相对变换”
2.如何改变转向:给角度乘上负号
3.如何搭配时间轴:如下

其中的数组是所指定旋转面包含的3*3块的数组。
为配合时间轴,函数的“初始坐标”在时间轴执行期间应该要都是一样的值,所以要在时间轴之前就获得初始坐标。(这点我纠结了好久)
(3)实现一面9个块的旋转
由上面的蓝图就可以猜到我用了数组,其中具体的步骤包含比如,生成3*3*3个立方块,将它们加入数组;通过遍历数组筛选出需要被旋转的块,放入新数组;遍历新数组,另每一个块都旋转。
其中,生成魔方的代码如下:

筛选块的代码如下:

通过如上的代码,我们就实现了生成魔方,且可以控制其特定面旋转。
其余还有一些细节,比如:
按键控制,我是采用自定义事件+“开启字符串”的方式,指定对应操作(这部分写在actor里),然后在自己新建的pawn里添加按键操作(这里需要蓝图通信):



其中可以看到我在自定义事件被触发后还有一段代码,其分别是为了实现清空数组和避免连续按按键产生干扰。