[Unity] Rimozione dell’erba cresciuta sul terreno dagli script.
L’ho provato perché era necessario poter cancellare parzialmente l’erba cresciuta sul TERRENO nel contenuto ZOMBIE a cui sto lavorando.
Per prima cosa, posizionate un cubo trasparente nel campo e impostate il collider su ‘is trigger’.
Posizionare il cubo nella posizione appropriata in modo che si sovrapponga all’area erbosa di TERRAIN.

Quindi, creare un nuovo script e collegarlo al cubo. Il nome dello script è appropriato.
Di seguito è riportato il codice per rimuovere l’erba dall’area a contatto con il cubo.
public float grassClearRadius = 5f;
public int detailLayer = 0;
private Terrain terrain;
void Start()
{
terrain = Terrain.activeTerrain;
TerrainData runtimeData = Instantiate(terrain.terrainData);
terrain.terrainData = runtimeData;
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject == terrain.gameObject)
{
ClearGrass(transform.position, grassClearRadius);
}
}
void ClearGrass(Vector3 pos, float radius)
{
if (terrain == null) return;
TerrainData data = terrain.terrainData;
int detailResolution = data.detailResolution;
Vector3 terrainPos = pos - terrain.transform.position;
int centerX = (int)(terrainPos.x / data.size.x * detailResolution);
int centerY = (int)(terrainPos.z / data.size.z * detailResolution);
int size = Mathf.CeilToInt(radius / data.size.x * detailResolution);
int[,] cleared = new int[size, size];
data.SetDetailLayer(centerX - size / 2, centerY - size / 2, detailLayer, cleared);
}
Se il terreno è uguale a quello di destinazione in ontriggerenter, viene richiamata la funzione cleargrass.
grassClearRadius è il raggio con cui l’erba viene cancellata. detailLayer è lo strato di erba.
I dati originali del terreno non vengono distrutti all’avvio. Se non si inserisce questo parametro, anche i dati al termine dell’esecuzione verranno modificati.
In ClearGrass, viene eliminata l’erba entro l’intervallo specificato dalla posizione del cubo.




![[Unity]Esecuzione di metodi in tempi arbitrari nel PUN2 di Photon.](https://kuroko-labo.com/wp/wp-content/themes/kuroko3/images/noimage.png)
![[Unity]Ho creato un campo con Gaia Pro 2023.](https://kuroko-labo.com/wp/wp-content/uploads/2025/01/image06.png)
![[Unity]Ho acquistato un vecchio filtro TV.](https://kuroko-labo.com/wp/wp-content/uploads/2019/11/image05.png)
![[Unity]Cercate di creare un indicatore circolare che avanza quando si fa clic con il mouse.](https://kuroko-labo.com/wp/wp-content/uploads/2019/07/circle.fw_.png)
![[Unity]Utilizzare localPosition per creare un sistema simile a un nastro trasportatore.](https://kuroko-labo.com/wp/wp-content/uploads/2019/06/image01-1.png)
![[Unity]Ottenere e visualizzare le coordinate del mouse.](https://kuroko-labo.com/wp/wp-content/uploads/2019/03/image02.png)