Hi, I’m trying to make a script that converts the details on a Unity Terrain to GameObjects with their position and rotation for my game. I made some tests and tried some things but it deosn’t work it always makes me this stange circle with infinite grass prefabs in it that makes the scene crash. I don’t understand why it does that :
Here is my Code :
using UnityEngine;
public class InstantiateDetailsOnTerrain : MonoBehaviour
{
public Terrain terrain;
public GameObject prefab;
void Start()
{
TerrainData terrainData = terrain.terrainData;
int detailWidth = terrainData.detailWidth;
int detailHeight = terrainData.detailHeight;
for (int detailLayer = 0; detailLayer < terrainData.detailPrototypes.Length; detailLayer++)
{
int[,] detailLayerData = terrainData.GetDetailLayer(0, 0, detailWidth, detailHeight, detailLayer);
for (int y = 0; y < detailHeight; y++)
{
for (int x = 0; x < detailWidth; x++)
{
if (detailLayerData[x, y] > 0)
{
Vector3 worldPosition = GridToWorldPosition(x, y, terrainData);
Instantiate(prefab, worldPosition, Quaternion.identity);
}
}
}
}
}
Vector3 GridToWorldPosition(int x, int y, TerrainData terrainData)
{
float xPos = (x / (float)terrainData.detailWidth) * terrainData.size.x;
float yPos = terrainData.GetHeight(x, y);
float zPos = (y / (float)terrainData.detailHeight) * terrainData.size.z;
Vector3 worldPosition = new Vector3(xPos, yPos, zPos) + terrain.transform.position;
return worldPosition;
}
}
Does anyone have a solution ?
