[Fix] All in one + add dice

This commit is contained in:
2026-02-23 22:24:46 +07:00
parent 4f942cd7c0
commit 2f9e082d75
1593 changed files with 474068 additions and 31 deletions
@@ -0,0 +1,125 @@
using UnityEngine;
using System.Collections.Generic;
namespace AllIn13DShader
{
public class AllIn13DShaderShaderPropertyCurveAnim : MonoBehaviour
{
[SerializeField] private string numericPropertyName = "_HsvShift";
[SerializeField] private AnimationCurve animationCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f);
[SerializeField] private float animationDuration = 1f;
[SerializeField] private float waitDuration = 0.5f;
[SerializeField] private float minValue = 0f;
[SerializeField] private float maxValue = 1f;
[Space, SerializeField, Header("If empty uses instances of currently used Materials")]
private Material[] materials;
private Material[] originalMaterials;
private bool restoreMaterialsOnDisable = false;
private int propertyShaderID;
private float timer = 0f;
private bool isAnimating = true;
private bool isValid = true;
private void Start()
{
if(materials == null || materials.Length == 0)
{
Renderer renderer = GetComponent<Renderer>();
if(renderer != null) materials = renderer.materials;
}
else
{
originalMaterials = new Material[materials.Length];
for(int i = 0; i < materials.Length; i++)
if(materials[i] != null) originalMaterials[i] = new Material(materials[i]);
restoreMaterialsOnDisable = true;
}
if(materials == null || materials.Length == 0) DestroyComponentAndLogError(gameObject.name + " has no valid Materials, deleting AllIn1VfxScrollShaderProperty component");
else
{
bool allValid = true;
for(int i = 0; i < materials.Length; i++)
{
if(materials[i] == null || !materials[i].HasProperty(numericPropertyName))
{
allValid = false;
break;
}
}
if(allValid)
propertyShaderID = Shader.PropertyToID(numericPropertyName);
else
DestroyComponentAndLogError(gameObject.name + "'s Material(s) don't all have a " + numericPropertyName + " property");
}
}
private void Update()
{
if(materials == null || materials.Length == 0)
{
if(isValid)
{
Debug.LogError("The object " + gameObject.name + " has no Materials and you are trying to access them. Please take a look");
isValid = false;
}
return;
}
timer += Time.deltaTime;
if(isAnimating)
{
if(timer < animationDuration)
{
float normalizedTime = timer / animationDuration;
float curveValue = animationCurve.Evaluate(normalizedTime);
float remappedValue = Mathf.Lerp(minValue, maxValue, curveValue);
for(int i = 0; i < materials.Length; i++)
if(materials[i] != null) materials[i].SetFloat(propertyShaderID, remappedValue);
}
else
{
isAnimating = false;
timer = 0f;
}
}
else
{
if(timer >= waitDuration)
{
isAnimating = true;
timer = 0f;
}
}
}
private void DestroyComponentAndLogError(string logError)
{
Debug.LogError(logError);
Destroy(this);
}
private void OnDisable()
{
if(restoreMaterialsOnDisable && materials != null && originalMaterials != null)
{
for(int i = 0; i < materials.Length; i++)
if(materials[i] != null && originalMaterials[i] != null)
materials[i].CopyPropertiesFromMaterial(originalMaterials[i]);
}
}
private void OnDestroy()
{
if(originalMaterials != null)
for(int i = 0; i < originalMaterials.Length; i++)
if(originalMaterials[i] != null) Destroy(originalMaterials[i]);
}
}
}