unity3d 如何缩放切片图上的特定切片?

6bc51xsx  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(182)

大家好!我正在Unity 2D上做一个游戏,我遇到了一个问题。我需要挖特定的雪瓷砖,当玩家拿着LeftShift,并在触发标签“雪”(瓷砖Map确实有这样的标签)。我决定改变规模,因为这是最容易理解的球员的变化,我认为(使精灵黑暗,摧毁它,等等)。现在我有这样的代码:

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.首先,我搜索了net(尤其是文档中的)函数,这些函数对确切的tile做了一些事情;
1.然后我尝试使用Matrix 4x 4来缩放tile,但是它没有按预期工作(它根本没有工作,但是至少没有错误);

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上搜索了这样一个问题,但没有找到任何对我有帮助的东西,所以我的问题是!

zkure5ic

zkure5ic1#

您可以使用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)));

    }

相关问题