subscribe via rss
11 Mar 2010

[Unify Wiki] EncloseTerrain

Author: Unity3D News Pipe | Filed under: Technology

Summary: New page: == Description == An easy and quick script for encapsulating your terrain in a wall. Future: More advanced versions to come... <csharp> /* * Written by: Matt Greene (aka Deis) * Last ...


== Description ==

An easy and quick script for encapsulating your terrain in a wall.

Future:
More advanced versions to come...

<csharp>
/*
* Written by: Matt Greene (aka Deis)
* Last Revision: 3/11/2010 12:50 EST
*
* A very simply script for encapsulating your terrain
* in a wall. I suggest combining this script with others
* such as the Terrain Toolkit and blending.
*
* NOTICE: You need to manually set your Height and Depth
* in this script for now.
*
*/

using UnityEngine;
using UnityEditor;

public class EncloseTerrain : MonoBehaviour
{
// The desired height of the wall
public static float EncloseHeight = 5;
// How thick the wall needs to be
public static float EncloseDepth = 10;

[MenuItem("CONTEXT/Terrain/Enclose")]
[MenuItem("CONTEXT/TerrainData/Enclose")]
[MenuItem("Terrain/Enclose")]
public static void Enclose(MenuCommand command)
{
TerrainData terrainData;

if (command.context is TerrainData)
terrainData = (TerrainData) command.context;
else if (command.context is Terrain)
terrainData = ((Terrain) command.context).terrainData;
else
terrainData = Terrain.activeTerrain.terrainData;

Undo.RegisterUndo(terrainData, "Enclose Terrain");

EditorUtility.DisplayProgressBar("Enclose Terrain", "Initializing", 0.0f);


int w = terrainData.heightmapWidth;
int h = terrainData.heightmapHeight;
float size = terrainData.size.y;
float[,] heights = terrainData.GetHeights(0, 0, w, h);

for (int x = 0; x < heights.GetLength(0); x++)
{
for (int y = 0; y < heights.GetLength(1); y++)
{
if (x < EncloseDepth || x > w - EncloseDepth)
{
heights[x, y] = EncloseHeight / size;
}

if (y < EncloseDepth || y > h - EncloseDepth)
{
heights[x, y] = EncloseHeight / size;
}
}
}

terrainData.SetHeights(0, 0, heights);

EditorUtility.DisplayProgressBar("Enclose Terrain", "Finalizing", 1.0f);
EditorUtility.ClearProgressBar();
}
}

</csharp>

Source Article »

One Response to “[Unify Wiki] EncloseTerrain”

  1. [...] sur le site Bydesigngames, voici un script en C# qui permet de créer des murs tout autour d’un terrain afin de lui [...]

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>