Récemment j'ai commencé le développement d'un outil terrain intégré au jeu avec un Projecteur pour afficher la taille du pinceau. Mais j'ai une erreur qui est introuvable sur les forums Unity ou sans réponse.
Pour expliquer la situation :
Lorsque le terrain doit être modifié (Avec une certaine taille "diamètre" et une certaine force, le tout a la position donnée du raycast)
Code : Tout sélectionner
void ModifyTerrain(Vector3 position, float force, int diamètre)
Code : Tout sélectionner
int terrainPosX = (int)((position.x / terrain.terrainData.size.x) * resolutionX);
int terrainPosY = (int)((position.z / terrain.terrainData.size.z) * resolutionY);
Je stocke les changements du terrain dans un nouveau tableau qui prend la taille X et Y du diamètre demandé. Cela permet de donner au terrain uniquement les changements sans avoir a mettre a jour le terrain entier a chaque fois.
Code : Tout sélectionner
float[,] heightChange = new float[diamètre, diamètre];
Code : Tout sélectionner
for (int x = 0; x < diamètre; x++)
for (int y = 0; y < diamètre; y++)
{
int x2 = x - radius;
int y2 = y - radius;
if (terrainPosY + y2 < 0 || terrainPosY + y2 >= resolutionY ||
terrainPosX + x2 < 0 || terrainPosX + x2 >= resolutionX)
continue;
float distanceSquared = Mathf.Sqrt((x2 * x2) + (y2 * y2));
if (distanceSquared > radius)
{
heightChange[y, x] = heights[terrainPosY + y2, terrainPosX + x2];
}
else
{
heightChange[y, x] = heights[terrainPosY + y2, terrainPosX + x2] + (force - (force * (distanceSquared / radius)));
heights[terrainPosY + y2, terrainPosX + x2] = heightChange[y, x];
}
}
Je n'ai trouvé aucun sujet qui donnait une solution a l'erreur.ArgumentException: X or Y base out of bounds. Setting up to 289x28 while map size is 513x513
UnityEngine.TerrainData.SetHeights (Int32 xBase, Int32 yBase, System.Single[,] heights)
Merci pour votre aide!