Je poste ici en espérant avoir plus de chance que sur le forum Unity (https://forum.unity3d.com/threads/how-t ... it.487505/) et Unity Answers (http://answers.unity3d.com/questions/13 ... ck-to.html), où personne n'a encore répondu.
J'essaye de rotate un terrain en runtime, et quand je quitte le jeu (soit depuis l'éditor soit en Standalone), je veux que le Terrain Asset soit de retour à la normale. Parce que mon problème, c'est que les modifications d'un Terrain Asset en runtime sont conservées hors runtime !
J'ai donc pensé à cet algo :
- Copier le Terrain Data
- Rotate la copie
- Au quit, la copie est automatiquement détruite, et donc le terrain devrait reprendre son Terrain Asset original... Non ?
J'ai donc ce code, que vous pouvez tester (il faudra me dire pourquoi le forum met tout le code en mode dégueu) :
Code : Tout sélectionner
using UnityEngine;
public class RotateTerrain : MonoBehaviour
{
[SerializeField]
private Terrain terrain; void Start()
{
WorkOnNewCopy(); // Now we can safely modify our terrain... Can we?
TerrainRotate(terrain, degrees: 90);
}
void WorkOnNewCopy()
{
TerrainData backup_terrainData = terrain.terrainData;
backup_terrainData.name = terrain.terrainData.name + "_tmp";
backup_terrainData = Instantiate(backup_terrainData);
terrain.terrainData = backup_terrainData;
terrain.GetComponent<TerrainCollider>().terrainData = backup_terrainData;
terrain.Flush();
}
void TerrainRotate(Terrain terrain, float degrees)
{
// Super-secret code
}
}
Des idées ? Merci d'avance !