Files
2026-03-04 10:03:45 +08:00

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;
}
}
}
}
}