c# - 如何在 Unity TileSystem 中停止平铺动画?

标签 c# unity3d tile

我想了解 Unity 中的 tileSystem 构建,但我不知道如何停止 AnimatedTiles 中的动画。

一旦动画开始,我想不出任何办法来阻止它。我正在使用 Unity 2018.3.2f1,但我认为 TileSystem 在下一个版本中类似。

AnimatedTile 中唯一处理动画的代码是:

public override void GetTileData(Vector3Int location, ITilemap tileMap, ref TileData tileData)
        {
            tileData.transform = Matrix4x4.identity;
            tileData.color = Color.white;
            if (m_AnimatedSprites != null && m_AnimatedSprites.Length > 0)
            {
                tileData.sprite = m_AnimatedSprites[0];
                tileData.colliderType = m_TileColliderType;
            }
        }

        public override bool GetTileAnimationData(Vector3Int location, ITilemap tileMap, ref TileAnimationData tileAnimationData)
        {
            if (m_AnimatedSprites.Length > 0)
            {
                tileAnimationData.animatedSprites = m_AnimatedSprites;
                tileAnimationData.animationSpeed = Random.Range(m_MinSpeed, m_MaxSpeed);
                tileAnimationData.animationStartTime = m_AnimationStartTime;
                return true;
            }
            return false;
        }

我想在一段时间后(比如 3 秒)或最后一帧后停止动画。我们将不胜感激!

最佳答案

所以过了一段时间后,找到了解决方法,它看起来像这样:

public class TileBump : MonoBehaviour
{

    public Transform m_GridParent;
    public GameObject m_TileMap_Prefab;
    public AnimatedTile m_tilePrefabAnimated;
    public Tile m_tilePrefabStatic;

    private Tilemap map;

    void Start()
    {
        StartCoroutine(EStart());
    }

    public IEnumerator EStart()
    {
        GameObject t = Instantiate(m_TileMap_Prefab, m_GridParent);
        map = t.GetComponent<Tilemap>();
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                map.SetTile(new Vector3Int(i, j, 0), m_tilePrefabAnimated);
                StartCoroutine(Operation(new Vector3Int(i, j, 0)));
                yield return new WaitForSeconds(0.3f);
            }
        }

    }

    public IEnumerator Operation(Vector3Int x)
    {
        yield return new WaitForSeconds(m_tilePrefabAnimated.m_AnimatedSprites.Length / m_tilePrefabAnimated.m_AnimationSpeed);
        map.SetTile(x, m_tilePrefabStatic);
    }
}

但是。我在这里的理解是瓷砖不适合那个。 TileMap 中的每个图 block 都引用 ScriptableObject,因此每个动画在每一帧中都是相同的。

但是如果有人需要这种效果,这是一种方法。

关于c# - 如何在 Unity TileSystem 中停止平铺动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538441/

相关文章:

c# - Nancy OWIN 测试互动

基于 Java Tile 的光照性能问题

HTML/CSS 马赛克图片库

c# - 缓存或应用程序变量来存储对象列表?

c# - 使用多个 ServicePointManager.SecurityProtocol,它首先尝试什么?

c# - 非 UTC 或本地时区中的日期时间

c# - 如何修复 UNITYTLS_X509VERIFY_NOT_DONE

c# - 随机选择图像以在 c# unity 中的随机按钮上显示

audio - 为什么AudioSource无法播放?

java - 如何在等距 libgdx 中触摸时获取图 block 位置