欢迎光临散文网 会员登陆 & 注册

虚幻引擎制作魔方小游戏——笔记(一)

2023-03-01 23:35 作者:maho赛高  | 我要投稿

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里添加按键操作(这里需要蓝图通信):

自定义事件+分支过滤+清除数组+“开启字符串”
按键触发事件
蓝图通信

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

 


虚幻引擎制作魔方小游戏——笔记(一)的评论 (共 条)

分享到微博请遵守国家法律