日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity初步 基本拼图实现

發布時間:2025/7/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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初步 基本拼图实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。