void Start() { meshFilter = GetComponent("MeshFilter") as MeshFilter; noise = new PerlinINFINIGRASS(); register_time = Time.fixedTime; this_transf = this.transform; start_scale = this_transf.localScale; //v1.5 if (RandomScale) { this_transf.localScale = start_scale * Random.Range(0.1f, 1.1f); } if (RandomRot) { //Vector3 pos_original = this_transf.position; //this_transf.localPosition = Vector3.zero; float Rot_angle = Random.Range(-33, 33); this_transf.rotation = Quaternion.Lerp(this_transf.rotation, Quaternion.AngleAxis(Rot_angle, new Vector3(Random.Range(-0.5f, 1), Random.Range(-1, 1), Random.Range(-1, 0.5f))), Random.Range(0.2f, 0.7f)); //this_transf.position = pos_original; this_transf.position = this_transf.position + Displace_factor - new Vector3(0, -Mathf.Abs(Rot_angle) * Rot_disp_factor * 0.1f, 0); } //////////// if (scale != 0) { Mesh mesh = meshFilter.mesh; if (baseVertices == null) { baseVertices = mesh.vertices; } Vector3[] vertices = new Vector3[baseVertices.Length]; float timex = Time.time * speed + 0.1365143f * CHANGE_FACTOR + 0.11f; float timey = Time.time * speed + 1.21688f * CHANGE_FACTOR + 0.12f; float timez = Time.time * speed + 2.5564f * CHANGE_FACTOR + 0.14f; for (int i = 0; i < vertices.Length; i++) { Vector3 vertex = baseVertices[i]; vertex.x += noise.Noise(timex + vertex.x, timex + vertex.y, timex + vertex.z) * scale; vertex.y += noise.Noise(timey + vertex.x, timey + vertex.y, timey + vertex.z) * scale; vertex.z += noise.Noise(timez + vertex.x, timez + vertex.y, timez + vertex.z) * scale; vertices[i] = vertex; } mesh.vertices = vertices; if (recalculateNormals) { mesh.RecalculateNormals(); } mesh.RecalculateBounds(); if (Update_collider) { MeshCollider this_mesh_collider = this.gameObject.GetComponent <MeshCollider>(); if (this_mesh_collider != null) { this_mesh_collider.sharedMesh = mesh; } } if (ColorVertices) { //raycast to grab color destColor = Color.black; RaycastHit hit = new RaycastHit(); //if(Physics.Raycast(this_transf.position,-this_transf.up,out hit)){ if (Physics.Raycast(this_transf.position + new Vector3(0, 0, 0), -Vector3.up, out hit)) { Renderer rend = hit.transform.GetComponent <Renderer>(); if (rend != null) { Texture2D tex = rend.material.mainTexture as Texture2D; Vector2 pixelUV = hit.textureCoord; //Debug.Log("aaaa"); if (tex != null) { pixelUV.x *= tex.width; pixelUV.y *= tex.height; try { destColor = tex.GetPixel((int)pixelUV.x, (int)pixelUV.y); } //finally{ //catch (UnityException e){ catch { //e.Message.StartsWith } //Debug.Log(destColor); } } } if (tintBase) { destColor = destColor * tineBaseColor; } Color[] VertColors = new Color[baseVertices.Length]; for (int i = 0; i < VertColors.Length; i++) { //VertColors[i] = Color.Lerp(Color.black,Color.white,vertices[i].y*Vert_Y_Scale_factor * this_transf.localScale.y); //VertColors[i] = Color.Lerp(Color.black,Color.white, (this_transf.localScale.y/2) + vertices[i].y); //VertColors[i] = Color.Lerp(Color.black,Color.white, (this_transf.localPosition.y + vertices[i].y/this_transf.localScale.y)*Vert_Y_Scale_factor ); //VertColors[i] = Color.Lerp(Color.white,Color.black, (this_transf.localPosition.y + vertices[i].y/this_transf.localScale.y)*Vert_Y_Scale_factor ); VertColors[i] = Color.Lerp(destColor, Color.white, ((this_transf.TransformPoint(vertices[i]).y - this_transf.parent.position.y) * Vert_Y_Scale_factor) / this_transf.localScale.y); //VertColors[i] = Color.Lerp(Color.black,Color.red,vertices[i].y*Vert_Y_Scale_factor); //VertColors[i] = Color.white; } mesh.colors = VertColors; } } if (!Enable_procedural) { this.enabled = false; } }
void Update() { if (Enable_procedural) { if (!Deactivate_after | (Deactivate_after & ((Time.fixedTime - register_time) < seconds))) { if (scale != 0) { Mesh mesh = meshFilter.mesh; if (baseVertices == null) { baseVertices = mesh.vertices; } Vector3[] vertices = new Vector3[baseVertices.Length]; float timex = Time.time * speed + 0.1365143f * CHANGE_FACTOR; float timey = Time.time * speed + 1.21688f * CHANGE_FACTOR; float timez = Time.time * speed + 2.5564f * CHANGE_FACTOR; for (int i = 0; i < vertices.Length; i++) { Vector3 vertex = baseVertices [i]; vertex.x += noise.Noise(timex + vertex.x, timex + vertex.y, timex + vertex.z) * scale; vertex.y += noise.Noise(timey + vertex.x, timey + vertex.y, timey + vertex.z) * scale; vertex.z += noise.Noise(timez + vertex.x, timez + vertex.y, timez + vertex.z) * scale; vertices [i] = vertex; } mesh.vertices = vertices; if (recalculateNormals) { mesh.RecalculateNormals(); } mesh.RecalculateBounds(); // if(ColorVertices){ // // Color[] VertColors = new Color[baseVertices.Length]; // // for(int i=0;i<VertColors.Length;i++){ // // VertColors[i] = Color.Lerp(Color.black,VertColors[i],0.99f); // //VertColors[i] = Color.black; // } // // mesh.colors = VertColors; // } } if (Colorize) { int RAND_1 = Random.Range(0, 3); if (RAND_1 == 0) { this.gameObject.GetComponent <Renderer> ().material.color = Color.Lerp(this.gameObject.GetComponent <Renderer> ().material.color, Color.blue, Color_cycle_speed); } else if (RAND_1 == 1) { this.gameObject.GetComponent <Renderer> ().material.color = Color.Lerp(this.gameObject.GetComponent <Renderer> ().material.color, Color.red, Color_cycle_speed); } else if (RAND_1 == 2) { this.gameObject.GetComponent <Renderer> ().material.color = Color.Lerp(this.gameObject.GetComponent <Renderer> ().material.color, Color.magenta, Color_cycle_speed); } } } } }