[Unity] Eliminación de la hierba que crece en el terreno de los scripts.


Probé esto porque se hizo necesario poder borrar parcialmente la hierba crecida en TERRAIN en el contenido ZOMBIE en el que estoy trabajando.

En primer lugar, coloque un cubo transparente en el terreno y establecer el collider a ‘es disparar’.

Coloque el cubo en la posición adecuada para que se superponga a la zona de hierba en TERRAIN.

A continuación, cree un nuevo script y adjúntelo al cubo. El script recibe el nombre apropiado.

A continuación se muestra el código para eliminar la hierba de la zona en contacto con el 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);
    }

Si el terreno objetivo es el mismo terreno que el terreno objetivo de ontriggerenter, se llama a la función cleargrass.

El grassClearRadius es el radio en el que se limpia la hierba. detailLayer es la capa de hierba.

Los datos originales del terreno no se destruyen en el inicio. Si no pones esto, los datos después de que termine la ejecución también serán editados.

En ClearGrass, se borra la hierba dentro del rango especificado de la posición del cubo.