Script EncloseTerrain

Trouvé sur le site Bydesigngames, voici un script en C# qui permet de créer des murs tout autour d’un terrain afin de lui imposer une limite.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
* 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();
}
}
avatar

krys64

bla bla bla

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.