制作九宫格旋转拼图游戏

前言:昨天上班摸鱼时实在无聊,就顺手新建一个项目做个小游戏试试,不消20分钟就做好了。但是看着游戏画面熟悉,突然想起去年实习时,就是因为这个游戏没做起,被上家公司辞退了。鉴于此游戏对我Unity生涯具有重要意义,让我卧薪尝胆,所以今天趁着周末发到网上来,供部分小白参考,也让我铭记这段耻辱过去。

 

1.首先Unity的Hierarchy面板下新建九张Image,并按顺序命名1 2 3......,并把这九张图片作为子物体放在任意游戏物体下,在该物体身上添加GridLayoutGroup组件调整子物体的位置距离等。

 

 2.然后为这九张图片添加Text子物体,同样的Text也为其按顺序赋值(主要是为了可以在游戏界面中看清顺序)。同时继续创建四个Button,调整位置在拼图块1 2 4 5的中间,其余同理。

3.添加脚本MovePuzzle,并放在Canvas下,用于控制游戏逻辑。

 

 

 

 这是主要代码。puzzles是存放九个拼图块的数组,该方法的四个参数分别是要控制的四个拼图块在数组中的索引。第一步是交换位置,我使用了DoTween插件为交换位置的过程添加了动画,这是很普通的位置交换代码(先用临时变量存放第一个拼图块的位置,再依次交换)。之后就是重中之重了:

该游戏在玩家看来,难点在于每一组按钮控制的拼图块都有重合的块;开发者的难点也是这点。因为puzzles数组存放的RectTransform对象,是引用类型,如果我们还是直接使用普通交换(类似int a=10;int b=20;int temp=a;a=b;b=temp;)是行不通的,因为引用类型会跟着变换(不严谨,详细可查百度)。所以我的方法是,直接再新建对象,从parent的子物体中找到此物体并存放。再重新为puzzles数组赋值,如此即可。

4.接下来放剩余部分代码,前面没看懂可以先看这段再回过头看。

 

 OnValidate方法是我懒得为游戏物体改名,可看我上篇随笔对此方法使用或百度。为四个button添加监听事件,传入的参数是该按钮控制的拼图块在数组中的索引。

下面是游戏效果:

 

总结:此游戏对于一些老鸟来说不算难,甚至可以说简单了,但是对于新手来说却始终无法找到破局的方法,去年我坐了一天也没想清为啥做不出。其中脚本的方法不是最好的,但是我认为这是特别容易理解的一种方法,起到抛砖引玉之效。

posted @ 2021-08-01 12:09  军酱不是酱  阅读(1218)  评论(0编辑  收藏  举报