Colinp
@Colinp
Учу C++

Как создать равные кусочки пазла из sprite'а в Unity?

Как создать одинаковые по размеру квадратики пазла в отношении 1:1 из целой картинки (sprite'a)?
Пытался искать соотношение с помощью размера картинки, но не додумался как довести это до ума
Буду не против если вы придерётесь к коду и укажите на что-то неправильное и не относящиеся к вопросу.

Код PuzzleCreator.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PuzzleCreator : MonoBehaviour
{
    [SerializeField] private Sprite PuzzleImage; // Картинка
    [SerializeField] private Transform Parent; // Ну тут понятно 
    [SerializeField] private Transform PuzzlePlace; // Положение в которое будут складываться пазлы
    [SerializeField] private Vector2Int GridSize; // Сетка
    private void SplitImage()
    {
        Texture2D Texture = PuzzleImage.texture;
        int TextureWidth = Texture.width;
        int TextureHeigth = Texture.height;

        for (int i = 0; i < GridSize.y; i++)
        {
            for (int j = 0; j < GridSize.x; j++)
            {
                // Создаём спрайт, ну или вырезаем его из нашей картинки, ставим ориджин в центр, но это не квадратики, а прямоугольники!
                Sprite PuzzlePiece_Sprite = Sprite.Create(
                       Texture,
                       new Rect((j * TextureWidth) / GridSize.x, (i * TextureHeigth) / GridSize.y, TextureWidth / GridSize.x, TextureHeigth / GridSize.y),
                       new Vector2(0.5f, 0.5f)
                       );

                // Добавляем колалйдер, ставим куда надо, меняем название, и находим отца
                GameObject PuzzlePiece_GameObject = new GameObject($"PuzzlePiece_{i}_{j}");
                PuzzlePiece_GameObject.transform.position = new Vector3(PuzzlePlace.position.x, PuzzlePlace.position.y, 0f);

                PuzzlePiece_GameObject.AddComponent<SpriteRenderer>().sprite = PuzzlePiece_Sprite;
                PuzzlePiece_GameObject.AddComponent<BoxCollider2D>();
                PuzzlePiece_GameObject.transform.SetParent(Parent);

            }
        }
        // Ура, победа!
        Debug.Log("Puzzle splited!");
    }

    void Start()
    {
        SplitImage();
    }
}

  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы