hey guys, i would really like to use this script from smokey monkeys, but i dont know how their blog is in chinise and i cant fully understand the script. So far i’ve attached it to a block and it creates a map on the terrain where it will be cut but i dont know how to run the final cut.
heres the script:
var sizeX:int = 2;
var sizeY:int = 2;
var terrain:Terrain;
private var myRenderer:Renderer;
private var mf:MeshFilter;
function Start() {
makePoly(false);
myRenderer = renderer;
if (!myRenderer) {
myRenderer = gameObject.AddComponent(MeshRenderer);
myRenderer.hideFlags = HideFlags.HideAndDontSave;
}
mf = GetComponent(MeshFilter);
}
function OnDrawGizmosSelected() {
makePoly(true);
}
private var verts:Array = new Array();
private var uvs:Array = new Array();
private var inds:Array = new Array();
private var nmls:Array = new Array();
private function makePoly(isEdit_:boolean) {
if (!terrain) {return;}
var w:int = terrain.terrainData.heightmapWidth;
var h:int = terrain.terrainData.heightmapHeight;
var meshScale:Vector3 = terrain.terrainData.size;
var tData = terrain.terrainData.GetHeights(0, 0, w, h);
meshScale = Vector3(meshScale.x/(w-1), meshScale.y, meshScale.z/(h-1));
var stX:int = Mathf.Floor(transform.position.z /meshScale.z);
var stY:int = Mathf.Floor(transform.position.x /meshScale.x);
var vCountW:int = sizeX +1;
var vCountH:int = sizeY +1;
var ii:int = 0;
var xi:int = 0;
var yi:int = 0;
verts.Clear();
uvs.Clear();
inds.Clear();
nmls.Clear();
for (var y:int = stY; y < stY +vCountH; y++) {
for (var x:int = stX; x < stX +vCountW; x++) {
verts.Add(Vector3.Scale(meshScale, Vector3(y, tData[x,y], x)) -transform.position);
uvs.Add(Vector2(1.0 /(vCountW -1) *xi, 1.0 /(vCountH -1) *yi));
nmls.Add(terrain.terrainData.GetInterpolatedNormal(x/(w -0.0), y/(h -0.0)));
if ((x < stX +vCountW -1) (y < stY +vCountH -1)) {
inds.Add(ii);
inds.Add(ii +1);
inds.Add(ii +1 +vCountW);
inds.Add(ii);
inds.Add(ii +1 +vCountW);
inds.Add(ii +vCountW);
}
ii++;
xi++;
}
yi++;
xi = 0;
}
if (!isEdit_) {
if (!mf) {
mf = gameObject.AddComponent(MeshFilter);
mf.hideFlags = HideFlags.HideAndDontSave;
}
mf.mesh.Clear();
mf.mesh.vertices = verts.ToBuiltin(Vector3);
mf.mesh.uv = uvs.ToBuiltin(Vector2);
mf.mesh.normals = nmls.ToBuiltin(Vector3);
mf.mesh.triangles = inds.ToBuiltin(int);
} else {
for (var i:int = 0; i < inds.length; i += 3) {
Gizmos.color = Color(1.0, 0.7, 0.0, 0.5);
Gizmos.DrawLine(verts[inds[i]] +transform.position, verts[inds[i+1]] +transform.position);
Gizmos.DrawLine(verts[inds[i+1]] +transform.position, verts[inds[i+2]] +transform.position);
Gizmos.DrawLine(verts[inds[i+2]] +transform.position, verts[inds[i]] +transform.position);
}
}
}
where the hell do they find the resources to create a script like this?
i think this must also be used with the script
@script ExecuteInEditMode
var disablePixelLights:boolean = true;
var textureSize:int = 1024;
var renderingLayers:LayerMask = ~20;
private var camCount:int = 0;
private var isVisible:boolean = true;
private var filteredCameras:Hashtable = new Hashtable();
private var layerFilterTexture:RenderTexture = null;
private var oldLayerFilterTextureSize:int = 0;
private var myRenderer:Renderer;
private var myTransform:Transform;
private var shaderMat:Material;
private var renderProjectionShaderStr:String =
"Shader \"FX/Render Projector\" {" +
" Properties {" +
" _MainTex (\"Texture\", 2D) = \"white\" { TexGen ObjectLinear }" +
" }" +
" Subshader {" +
" Pass {" +
" Tags { \"Queue\" = \"Geometry+10\" }" +
" Offset -32,-32" +
" Cull Back" +
" SetTexture[_MainTex] {" +
" matrix[_ProjMatrix] combine texture" +
" }" +
" }" +
" }" +
"}";
function Awake() {
myTransform = transform;
}
function Start() {
myRenderer = renderer;
if (myRenderer) {
myRenderer.castShadows = false;
myRenderer.receiveShadows = false;
}
}
function OnBecameVisible() {
isVisible = true;
}
function OnBecameInvisible() {
isVisible = false;
}
function OnWillRenderObject() {
if (!enabled || !myRenderer || !myRenderer.enabled || !isVisible) {return;}
var cam:Camera = Camera.current;
if (!cam) {return;}
var filteringCamera:Camera = CreateCameraObjects(cam);
var oldPixelLightCount:int = QualitySettings.pixelLightCount;
if (disablePixelLights) {QualitySettings.pixelLightCount = 0;}
UpdateCameraModes(cam, filteringCamera);
filteringCamera.Render();
if (!shaderMat) {
shaderMat = Material(renderProjectionShaderStr);
shaderMat.hideFlags = HideFlags.HideAndDontSave;
shaderMat.mainTexture = layerFilterTexture;
}
shaderMat.SetMatrix("_ProjMatrix", createProjectionMatrix(cam));
myRenderer.sharedMaterial = shaderMat;
if (disablePixelLights) {
QualitySettings.pixelLightCount = oldPixelLightCount;
}
}
function OnDisable() {
shaderMat = null;
if (layerFilterTexture) {
DestroyImmediate(layerFilterTexture);
layerFilterTexture = null;
}
for (var item in filteredCameras) {
DestroyImmediate((item.Value as Camera).gameObject);
}
filteredCameras.Clear();
}
private function createProjectionMatrix(camera_:Camera):Matrix4x4 {
var scaleOffset:Matrix4x4 = Matrix4x4.TRS(Vector3(0.5, 0.5, 0.5), Quaternion.identity, Vector3(0.5, 0.5, 0.5));
var mtx:Matrix4x4 = Matrix4x4.Scale(Vector3(1.0/myTransform.lossyScale.x, 1.0/myTransform.lossyScale.y, 1.0/myTransform.lossyScale.z));
return scaleOffset * camera_.projectionMatrix *camera_.worldToCameraMatrix *myTransform.localToWorldMatrix * mtx;
}
private function UpdateCameraModes(src:Camera, dest:Camera):void {
if (dest == null) {return;}
dest.clearFlags = src.clearFlags;
dest.backgroundColor = src.backgroundColor;
if (src.clearFlags == CameraClearFlags.Skybox) {
var sky:Skybox = src.GetComponent(Skybox);
var mysky:Skybox = dest.GetComponent(Skybox);
if (!sky || !sky.material) {
mysky.enabled = false;
} else {
mysky.enabled = true;
mysky.material = sky.material;
}
}
dest.farClipPlane = src.farClipPlane;
dest.nearClipPlane = src.nearClipPlane;
dest.orthographic = src.orthographic;
dest.fieldOfView = src.fieldOfView;
dest.aspect = src.aspect;
dest.orthographicSize = src.orthographicSize;
dest.worldToCameraMatrix = src.worldToCameraMatrix;
dest.cullingMask = renderingLayers.value;
dest.targetTexture = layerFilterTexture;
}
private function CreateCameraObjects(currentCamera:Camera):Camera {
var filteringCamera:Camera = null;
if (!layerFilterTexture || oldLayerFilterTextureSize != textureSize) {
if (layerFilterTexture) {DestroyImmediate(layerFilterTexture);}
layerFilterTexture = RenderTexture(textureSize, textureSize, 16);
layerFilterTexture.name = "__LayerFilteredTexture" +GetInstanceID();
layerFilterTexture.isPowerOfTwo = true;
layerFilterTexture.hideFlags = HideFlags.DontSave;
oldLayerFilterTextureSize = textureSize;
}
filteringCamera = filteredCameras[currentCamera] as Camera;
if (!filteringCamera) {
var go:GameObject = new GameObject("Layer Filtering Camera id" +GetInstanceID() +" for " +currentCamera.GetInstanceID(), Camera, Skybox);
filteringCamera = go.camera;
filteringCamera.enabled = false;
filteringCamera.transform.position = myTransform.position;
filteringCamera.transform.rotation = myTransform.rotation;
filteringCamera.gameObject.AddComponent("FlareLayer");
go.hideFlags = HideFlags.HideAndDontSave;
filteredCameras[currentCamera] = filteringCamera;
camCount++;
}
return filteringCamera;
}