// PuzzleManager.cs using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class PuzzleManager : MonoBehaviour { [Header("拼图设置")] public Texture2D puzzleImage; // 拼图原图 public int gridSize = 3; // 网格大小(3x3) public float spacing = 5f; // 拼图块间距 [Header("UI引用")] public RectTransform puzzleArea; // 拼图区域 public Transform piecesContainer; // 拼图块容器 public TMP_Text completedText; // 完成提示文本 private List pieces = new List(); private PuzzlePiece emptyPiece; // 空白拼图块 private Vector2 pieceSize; // 拼图块尺寸 void Start() { CreatePuzzle(); ShufflePieces(); } // 创建拼图 void CreatePuzzle() { // 计算拼图块尺寸 float areaWidth = puzzleArea.rect.width; float areaHeight = puzzleArea.rect.height; pieceSize = new Vector2(areaWidth / gridSize, areaHeight / gridSize); // 创建拼图块 for (int row = 0; row < gridSize; row++) { for (int col = 0; col < gridSize; col++) { // 跳过最后一个位置(作为空白) if (row == gridSize - 1 && col == gridSize - 1) { CreateEmptyPiece(row, col); continue; } // 创建拼图块GameObject GameObject pieceObj = new GameObject($"Piece_{row}_{col}"); pieceObj.transform.SetParent(piecesContainer); // 添加Image组件 Image img = pieceObj.AddComponent(); // 设置拼图块纹理 Sprite sprite = CreateSpriteForPiece(row, col); img.sprite = sprite; // 设置位置和大小 RectTransform rt = pieceObj.GetComponent(); rt.sizeDelta = pieceSize - Vector2.one * spacing; rt.anchoredPosition = GetPiecePosition(row, col); // 添加拼图块组件 PuzzlePiece piece = pieceObj.AddComponent(); piece.Initialize(this, row, col); pieces.Add(piece); // 添加按钮组件用于点击 Button btn = pieceObj.AddComponent