88 lines
2.3 KiB
C#
88 lines
2.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace Artngame.GIPROXY
|
|
{
|
|
public class ProceduralNoiseGIPROXY : MonoBehaviour
|
|
{
|
|
public float scale = 1f;
|
|
|
|
public float speed = 1f;
|
|
|
|
public bool recalculateNormals;
|
|
|
|
private Vector3[] baseVertices;
|
|
|
|
private PerlinGIPROXY noise;
|
|
|
|
public bool Colorize;
|
|
|
|
public float Color_cycle_speed = 0.1f;
|
|
|
|
private MeshFilter meshFilter;
|
|
|
|
public float CHANGE_FACTOR;
|
|
|
|
private float register_time;
|
|
|
|
public bool Deactivate_after;
|
|
|
|
public float seconds = 1f;
|
|
|
|
private void Start()
|
|
{
|
|
meshFilter = GetComponent("MeshFilter") as MeshFilter;
|
|
noise = new PerlinGIPROXY();
|
|
register_time = Time.fixedTime;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!(!Deactivate_after | (Deactivate_after & (Time.fixedTime - register_time < seconds))))
|
|
{
|
|
return;
|
|
}
|
|
if (scale != 0f)
|
|
{
|
|
Mesh mesh = meshFilter.mesh;
|
|
if (baseVertices == null)
|
|
{
|
|
baseVertices = mesh.vertices;
|
|
}
|
|
Vector3[] array = new Vector3[baseVertices.Length];
|
|
float num = Time.time * speed + 0.1365143f * CHANGE_FACTOR;
|
|
float num2 = Time.time * speed + 1.21688f * CHANGE_FACTOR;
|
|
float num3 = Time.time * speed + 2.5564f * CHANGE_FACTOR;
|
|
for (int i = 0; i < array.Length; i++)
|
|
{
|
|
Vector3 vector = baseVertices[i];
|
|
vector.x += noise.Noise(num + vector.x, num + vector.y, num + vector.z) * scale;
|
|
vector.y += noise.Noise(num2 + vector.x, num2 + vector.y, num2 + vector.z) * scale;
|
|
vector.z += noise.Noise(num3 + vector.x, num3 + vector.y, num3 + vector.z) * scale;
|
|
array[i] = vector;
|
|
}
|
|
mesh.vertices = array;
|
|
if (recalculateNormals)
|
|
{
|
|
mesh.RecalculateNormals();
|
|
}
|
|
mesh.RecalculateBounds();
|
|
}
|
|
if (Colorize)
|
|
{
|
|
switch (Random.Range(0, 3))
|
|
{
|
|
case 0:
|
|
base.gameObject.GetComponent<Renderer>().material.color = Color.Lerp(base.gameObject.GetComponent<Renderer>().material.color, Color.blue, Color_cycle_speed);
|
|
break;
|
|
case 1:
|
|
base.gameObject.GetComponent<Renderer>().material.color = Color.Lerp(base.gameObject.GetComponent<Renderer>().material.color, Color.red, Color_cycle_speed);
|
|
break;
|
|
case 2:
|
|
base.gameObject.GetComponent<Renderer>().material.color = Color.Lerp(base.gameObject.GetComponent<Renderer>().material.color, Color.magenta, Color_cycle_speed);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|