Как масштабировать конкретный фрагмент на тайловой карте?C#

Место общения программистов C#
Ответить
Anonymous
 Как масштабировать конкретный фрагмент на тайловой карте?

Сообщение Anonymous »

Всем!
Я делаю игру на 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(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");
}
}
}
}
}
Что можно использовать для масштабирования плиток? Заранее спасибо!
Несколько вещей я уже попробовал:
  • Сначала поискал в сети ( особенно в документации) функции, которые что-то делают с конкретным тайлом;
  • Затем я попробовал использовать Matrix4x4 для масштабирования тайла, но это не сработало должным образом (не сработало вообще, но хотя бы ошибок не было);

Код: Выделить всё

currentTile.transform = Matrix4x4.Scale(new Vector3(0.5f, 0.5f, 1));
  • Когда у меня не было выбора, я пытался сделать что-то сам и использовал спрайты. Конечно, это не сработало;

Код: Выделить всё

Sprite currentSprite = currentTile.sprite;

currentSprite.localScale -= new Vector3(0.01f, 0.01f, 0);
[*]Затем я искал такой вопрос здесь, на StackOverflow, но не нашел ничего, что могло бы мне помочь, поэтому вот мой вопрос: !


Подробнее здесь: https://stackoverflow.com/questions/744 ... he-tilemap
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»