前言:昨天上班摸魚時實在無聊,就順手新建一個項目做個小游戲試試,不消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添加監聽事件,傳入的參數是該按鈕控制的拼圖塊在數組中的索引。
下面是游戲效果:
總結:此游戲對於一些老鳥來說不算難,甚至可以說簡單了,但是對於新手來說卻始終無法找到破局的方法,去年我坐了一天也沒想清為啥做不出。其中腳本的方法不是最好的,但是我認為這是特別容易理解的一種方法,起到拋磚引玉之效。