Как масштабировать определенный тайл на тайловой карте?

каждый! Я делаю игру на Unity 2D и столкнулся с проблемой. Мне нужно выкопать определенный тайл снега, когда игрок держит левый Shift и находится в триггере с тегом «Снег» (такой тег есть на тайловой карте). Я решил изменить масштаб, так как это наиболее понятный игроку из вариантов, которые я думал (затемнение спрайта, его уничтожение и т.д.) Сейчас у меня есть этот код:

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

public class SnowTaking : MonoBehaviour
{   //Tile variables
    public Tilemap tilemap;
    public ITilemap iTilemap;
    public Tile whiteTile;
    public Tile redTile;
    public Tile greenTile;
    public Tile blueTile;

    void OnTriggerStay2D(Collider2D other) {
        if (other.gameObject.tag == "Snow") {
            if (Input.GetKey(KeyCode.LeftShift)) {
                //При нажатии LeftShift
                float x = gameObject.transform.position.x;
                float y = gameObject.transform.position.y;
                float z = 0;
                Vector3 position = new Vector3(x, y, z);
                Vector3Int tilePosition = tilemap.WorldToCell(position);
                Tile currentTile = tilemap.GetTile<Tile>(tilePosition);
                //Conditions for each type of snow
                if (whiteTile == currentTile) {
                    //Scaling tile here
                    Debug.Log("White");
                } else if (redTile == currentTile) {
                    //Scaling tile here
                    Debug.Log("Red");
                } else if (greenTile == currentTile) {
                    //Scaling tile here
                    Debug.Log("Green");
                } else if (blueTile == currentTile) {
                    //Scaling tile here
                    Debug.Log("Blue");
                } else {
                    Debug.Log("None");
                }
            }
        }
    }
}

Что я могу использовать для масштабирования плитки? Заранее спасибо!

Я уже пробовал несколько вещей:

  1. Прежде всего я поискал в сети (особенно в документации) функции, которые что-то делают с конкретным тайлом;
  2. Затем я попытался использовать Matrix4x4 для масштабирования тайла, но это не сработало, как задумано (не сработало вообще, но, по крайней мере, ошибок не было);
currentTile.transform = Matrix4x4.Scale(new Vector3(0.5f, 0.5f, 1));
  1. Когда у меня не было вариантов, я пытался сделать что-то сам и использовал спрайты. Конечно, это не сработало;
Sprite currentSprite = currentTile.sprite;

currentSprite.localScale -= new Vector3(0.01f, 0.01f, 0);
  1. Потом я искал такой вопрос здесь, на StackOverflow, но не нашел ничего, что могло бы мне помочь, поэтому вот мой вопрос!
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать tilemap.SetTransformMatrix();

В вашем случае вместо currentTile.transform = Matrix4x4.Scale(new Vector3(0.5f, 0.5f, 1));

Вы можете использовать tilemap.SetTransformMatrix(tilePosition, Matrix4x4.Scale(new Vector3(0.5f, 0.5f, 1)));

Если вы хотите анимировать его:

void Update() {

    if (Input.GetKey(KeyCode.LeftShift)) {
      time = 0f;
    }
    if (time < scaleDuration) {
      time += Time.deltaTime;
      var scaleValue = _animationCurve.Evaluate(time / scaleDuration);
      tilemap.SetTransformMatrix(tilePosition, Matrix4x4.Scale(new Vector3(scaleValue, scaleValue, 1)));

    }

Да, это на самом деле работает, но мне нужно несколько раз уменьшить размер, а не устанавливать конкретное число. Как я могу это сделать?

SlimeChannel 17.11.2022 15:34

Вы имеете в виду как анимация? Если это так, вы можете сделать это в обновлении, я отредактировал ответ

Kévin Sannié 17.11.2022 16:54

Я имею в виду что-то вроде "- = " в обновлении, но для тайлов. Есть ли такая функция для этого?

SlimeChannel 17.11.2022 18:33

Я думаю, что я мог бы использовать (currentScale - 0.25f), чтобы сделать это таким образом, поэтому я напишу здесь после того, как протестирую его.

SlimeChannel 18.11.2022 13:31

Другие вопросы по теме