Eu tenho um Unity Tilemap
e dentro desse tilemap estão presentes alguns AnimatedTile
s.
Quero alterar programaticamente os valores das velocidades mínima e máxima do bloco animado m_MinSpeed
e , m_MaxSpeed
enquanto o programa é executado, aplicar esses novos valores a todos os blocos existentes no meu mapa de blocos.
Eu tentei fazer o seguinte:
//Set the animation speed of My Animated Tile to 1
Resources.Load<AnimatedTile>("My Animated Tile").m_MinSpeed = 1;
Resources.Load<AnimatedTile>("My Animated Tile").m_MaxSpeed = 1;
Isso funciona ao jogar no Editor Unity, mas não em uma versão real do jogo, onde parece que os Recursos não podem ser modificados.
Algo assim também parece não funcionar:
Vector3Int tilePosition = new Vector3Int(0,0,0);
AnimatedTile animatedTile = myGrid.GetTile<AnimatedTile>(tilePosition);
animatedTile.m_MinSpeed = 1;
animatedTile.m_MaxSpeed = 1;
GameSceneObjects.wallGrid.SetTile(tilePosition, animatedTile);
aparentemente não tendo efeito nem no Editor Unity nem na compilação.
Como posso modificar isso para que funcione na compilação do jogo, não apenas no Editor Unity?
Em geral, esses valores modificados são levados em consideração apenas uma vez
GetTileData
e, no seu caso específico,GetTileAnimationData
são chamados.Veja também o exemplo de
TileBase.RefreshTile
=> um bloco modificado pode até afetar os vizinhos, então é importante que você percorra todo o mapa de blocos.=> Depois de modificar os valores dos blocos, você deve sempre chamar
Tilemap.RefreshTile
para aplicar essas alterações.Se você modificar muitos blocos, provavelmente será mais eficiente passar por eles
Tilemap.RefreshAllTiles
em algum momento, mas isso é algo que deve ser analisado primeiro