Unity初步 基本拼图实现
生活随笔
收集整理的這篇文章主要介紹了
Unity初步 基本拼图实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4 using UnityEngine.UI;
5
6 public class GameControl : MonoBehaviour {
7
8 //資源加載路徑
9 public string spritePath = "Sprites/Teriri";
10
11 //拼圖碎片
12 public Sprite[] sprites = null;
13
14 //拼圖控制(以按鈕的形式)
15 public Button[] buttons = null;
16
17 //攜帶網格方塊自動布局組件的背景
18 public Transform bgTransform = null;
19
20 //碎片預制體
21 public GameObject puzzlePrefab = null;
22
23 //用于記錄空圖片的位置
24 public RectTransform nullImage = null;
25
26 //用于獲取布局方塊的大小,便于調節碎片
27 private GridLayoutGroup bgLayout = null;
28
29 //用于記錄正確的圖片名字相加順序
30 private string correctSpritesNameOrder = null;
31
32 //用于確認按鈕化的圖片碎片是否正確
33 private string spritesNameOrder = null;
34
35 private Sprite remainSprite = null;//用于保存被置空的圖片,最后游戲結束時現實出來
36
37
38
39 //此函數用于初始化
40 private void Start() {
41
42 string theLastSpriteName = null;
43
44 //資源加載
45 this.sprites = Resources.LoadAll<Sprite>(this.spritePath);
46 this.bgLayout = bgTransform.GetComponent<GridLayoutGroup>();
47
48 List<Sprite> tempSprites = new List<Sprite>();
49
50 //記錄正確的精靈名字順序
51 for (int i = 0; i < this.sprites.Length; i++) {
52 tempSprites.Add(this.sprites[i]);
53 this.correctSpritesNameOrder += this.sprites[i].name;
54 //記錄下最后一張碎片的名字
55 if (i == this.sprites.Length - 1) {
56 theLastSpriteName = this.sprites[i].name;
57 }
58 }
59
60 print("正確的圖片名字構成順序:" + this.correctSpritesNameOrder.ToString());
61
62 int spritesLength = this.sprites.Length;
63 //Debug.Log(spritesLength);
64 for (int i = spritesLength - 1; i >= 0; i--) {
65 //實例化預制體
66 GameObject btnInstance = Instantiate(this.puzzlePrefab) as GameObject;
67 //獲取按鈕組件
68 Button btn = btnInstance.GetComponent<Button>();
69
70 GameControl self = this;//要保存一下當前的this對象,以免出現this指向錯誤
71 btn.onClick.AddListener(delegate () {
72 self.BtnOnclick(btnInstance.GetComponent<RectTransform>());
73 });
74
75 //隨機取圖片出來放置,達到打亂的效果
76 int randomNumber = Random.Range(0, tempSprites.Count);
77 btnInstance.name = tempSprites[randomNumber].name;
78
79 Image btnInstanceImage = btnInstance.GetComponent<Image>();
80 if (btnInstance.name == theLastSpriteName) {
81 //置空,否則打亂
82 this.remainSprite = tempSprites[randomNumber];
83 btnInstanceImage.sprite = null;
84 this.nullImage = btnInstance.GetComponent<RectTransform>();
85 } else {
86 //btnInstance.GetComponent<Image>().sprite = tempSprites[randomNumber];
87 btnInstanceImage.sprite = tempSprites[randomNumber];
88 }
89
90 //Debug.Log(btnInstanceImage);
91
92 tempSprites.Remove(tempSprites[randomNumber]);
93 btnInstance.transform.SetParent(bgTransform);
94 btnInstance.GetComponent<RectTransform>().localScale = Vector3.one;
95 //Debug.Log(randomNumber + ":" + btnInstance.name);
96 }
97 this.buttons = this.transform.Find("BackGround").GetComponentsInChildren<Button>();
98
99 ////隨機放置一個空圖片位置
100 //int tempNumber = Random.Range(0, this.buttons.Length);
101 //this.remainSprite = buttons[tempNumber].GetComponent<Image>().sprite;//保存被置空的圖片
102 //this.buttons[tempNumber].GetComponent<Image>().sprite = null;
103 //this.nullImage = this.buttons[tempNumber].GetComponent<RectTransform>();
104
105 //設置最右下角的圖片為消失的圖片
106 }
107
108 //拼圖按鈕點擊事件
109 private void BtnOnclick(RectTransform btnRect) {
110 if (Vector2.Distance(btnRect.anchoredPosition, this.nullImage.anchoredPosition)
111 <= (this.bgLayout.cellSize.x + this.bgLayout.spacing.x)) {
112 //print("產生替換");
113 //Sprite btnRectSprite = btnRect.GetComponent<Image>().sprite;//獲取需要替換的引用
114 ////這個空位應該是啥也沒有
115 //Sprite nullImageSprite = this.nullImage.GetComponent<Image>().sprite;
116 Sprite cacheSprite = btnRect.GetComponent<Image>().sprite;//交換前緩存一下圖片
117 string cacheString = btnRect.gameObject.name;
118
119 btnRect.gameObject.name = this.nullImage.gameObject.name;
120 this.nullImage.gameObject.name = cacheString;
121
122 btnRect.GetComponent<Image>().sprite = this.nullImage.GetComponent<Image>().sprite;
123 this.nullImage.GetComponent<Image>().sprite = cacheSprite;
124 //this.nullImage.GetComponent<Image>().sprite = cacheSprite;
125 this.nullImage = btnRect;
126
127 CheckAll();
128 }
129 }
130
131 //遍歷所有圖片名字順序,判斷是否完成拼圖,結束游戲
132 private void CheckAll() {
133 this.spritesNameOrder = "";
134 this.buttons = this.bgTransform.GetComponentsInChildren<Button>();
135 for (int i = 0; i < this.buttons.Length; i++) {
136 this.spritesNameOrder += this.buttons[i].gameObject.name;
137 }
138
139 if (this.spritesNameOrder == this.correctSpritesNameOrder) {
140 this.nullImage.GetComponent<Image>().sprite = this.remainSprite;//現實被置空的圖片
141 Debug.Log("德麗莎天下第一可愛!");
142 this.enabled = false;//停止游戲刷新
143 }
144 }
145 }
?
?
?
?
?
結束:
?
轉載于:https://www.cnblogs.com/steamedbun/p/10833102.html
總結
以上是生活随笔為你收集整理的Unity初步 基本拼图实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS单例模式
- 下一篇: MapReduce运行原理和过程