каждый! Я делаю игру на 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");
}
}
}
}
}
Что я могу использовать для масштабирования плитки? Заранее спасибо!
Я уже пробовал несколько вещей:
currentTile.transform = Matrix4x4.Scale(new Vector3(0.5f, 0.5f, 1));
Sprite currentSprite = currentTile.sprite;
currentSprite.localScale -= new Vector3(0.01f, 0.01f, 0);
Вы можете использовать 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)));
}
Вы имеете в виду как анимация? Если это так, вы можете сделать это в обновлении, я отредактировал ответ
Я имею в виду что-то вроде "- = " в обновлении, но для тайлов. Есть ли такая функция для этого?
Я думаю, что я мог бы использовать (currentScale - 0.25f), чтобы сделать это таким образом, поэтому я напишу здесь после того, как протестирую его.
Да, это на самом деле работает, но мне нужно несколько раз уменьшить размер, а не устанавливать конкретное число. Как я могу это сделать?