[Unity] Terrain에 심은 풀을 스크립트에서 지우기
지금 만들고 있는 좀비비기 콘텐츠 중 지형에 자란 풀을 부분적으로 지울 수 있도록 해야 할 필요성이 생겨서 테스트해봤습니다.
먼저 투명한 큐브를 필드 내에 배치하고, 콜리더를 ‘is trigger’로 설정합니다.
적당한 위치에 큐브를 배치하고, 지형에 풀이 자라고 있는 곳에 겹치도록 배치합니다.

그런 다음 새 스크립트를 만들어 큐브에 붙인다. 스크립트의 이름은 적당히 지어줍니다.
아래는 큐브에 닿는 부분의 풀을 지우는 코드입니다.
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);
}
ontriggerenter에서 대상 terrain과 동일한 terrain이면 cleargrass 함수를 호출한다.
grassClearRadius는 풀을 지울 반경, detailLayer는 풀의 레이어.
start에서 terrain의 원본 데이터를 파괴하지 않도록 하고 있습니다. 이 함수를 넣지 않으면 실행 종료 후 데이터도 편집된 기억이 있습니다.
ClearGrass에서 큐브의 위치에서 지정한 범위의 풀을 삭제하고 있습니다.




![[Unity] Photon의 PUN2에서 임의의 타이밍에 메서드 실행하기](https://kuroko-labo.com/wp/wp-content/themes/kuroko3/images/noimage.png)
![[Unity]Gaia Pro 2023으로 필드를 만들어 보았습니다.](https://kuroko-labo.com/wp/wp-content/uploads/2025/01/image06.png)
![[Unity]OLD TV Filter를 구입해 보았다](https://kuroko-labo.com/wp/wp-content/uploads/2019/11/image05.png)
![[Unity]localPosition을 이용하여 벨트 컨베이어 같은 것을 만든다.](https://kuroko-labo.com/wp/wp-content/uploads/2019/06/image01-1.png)
![[Unity]마우스가 클릭되면 진행하는 서클 게이지를 만들어 봅니다.](https://kuroko-labo.com/wp/wp-content/uploads/2019/07/circle.fw_.png)
![[Unity]마우스 좌표를 가져와서 표시하기](https://kuroko-labo.com/wp/wp-content/uploads/2019/03/image02.png)