void ClickBox_OnDropEvent(PointerEventData eventData) { if (_assignedPiece != null && eventData.pointerDrag != null && _cGroup.alpha == _defaultAlpha) { PuzzlePieceController puzzlepiece = eventData.pointerDrag.GetComponent <PuzzlePieceController>(); if (_assignedPiece == eventData.pointerDrag) { puzzlepiece.DroppedInSlot = true; // Alert the source piece that it has been dropped in its designated slot (it will then be disabled) _assignedPiece = null; StartCoroutine(FadeInSlot()); } // } else // { // puzzlepiece.DroppedOnSlot = false; //* CONSIDER unnecessary? // } } }
/// <Summary> /// パズルピースを生成します。 /// </Summary> /// <param name="buttonNum">ボタンの数(平方数で指定)</param> /// <param name="index">生成するピースのインデックス</param> public GameObject GeneratePuzzlePieces(int buttonNum, int index) { // インスタンス化するピースの数を計算します。 int pieceNum = buttonNum - 1; // 1行に配置されるピースの数を計算します。 int piecesInRow = (int)Mathf.Sqrt(buttonNum); // インスタンス化するPrefabを取得します。 GameObject piecePrefab = GetPuzzlePiecePrefab(); // インスタンス化するピースのサイズを取得します。 RectTransform pieceRect = piecePrefab.GetComponent <RectTransform>(); float pieceWidth = pieceRect.rect.width; float pieceHeight = pieceRect.rect.height; // ピースをインスタンス化します。 GameObject pieceObj = Instantiate(piecePrefab, Vector3.zero, Quaternion.identity); // 生成したオブジェクトの名前を変更します。 pieceObj.name = $"{piecePrefab.name}{index}"; // 生成したオブジェクトをピースオブジェクトの親オブジェクトの下に配置します。 pieceObj.transform.SetParent(puzzlePieceParent.transform); // ピースを配置する位置を計算します。 Vector2 piecePos = GetPuzzlePartsPos(index, piecesInRow, pieceWidth, pieceHeight); // 計算した位置を格納します。 pieceObj.transform.localPosition = piecePos; // 親オブジェクトの縮尺をセットします。 pieceObj.transform.localScale = puzzlePieceParent.transform.localScale; // このピースにセットするスプライトを取得します。 Sprite sprite = GetPieceSprite(index, piecesInRow); // ピースのIDとスプライトをセットします。 PuzzlePieceController controller = pieceObj.GetComponent <PuzzlePieceController>(); controller.SetUpPiece(index, sprite); return(pieceObj); }