Files
Cielonos/Assets/Scripts/SLSUtilities/AllInOneAssistance/General3DObject.cs
SoulliesOfficial 50ee502684 完善
2026-02-13 09:22:11 -05:00

63 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using DG.Tweening;
using Sirenix.OdinInspector;
using UnityEngine;
namespace SLSUtilities.AllInOneAssistance
{
public partial class General3DObject : SerializedMonoBehaviour
{
public List<Renderer> renderers;
public List<Material> materials;
protected virtual void Reset()
{
CollectRenderersAndMaterials();
}
[Button("Collect Renderers and Materials")]
private void CollectRenderersAndMaterials()
{
renderers = new List<Renderer>(GetComponentsInChildren<Renderer>());
materials = new List<Material>();
foreach (var renderer in renderers)
{
materials.AddRange(renderer.sharedMaterials);
}
}
}
public partial class General3DObject
{
private static readonly int FadeAmount = Shader.PropertyToID("_FadeAmount");
private static readonly int FadeOn = Shader.PropertyToID("_FadeOn");
private Sequence fadeSequence;
public void SetFadeAmount(float value)
{
foreach (var material in materials.Where(material => material.HasProperty(FadeAmount)))
{
material.SetFloat(FadeAmount, value);
}
}
public void SetFadeAnim(float duration, float startValue = 1f, float endValue = 0f)
{
fadeSequence?.Kill();
fadeSequence = DOTween.Sequence();
foreach (var material in materials.Where(material => material.HasProperty(FadeAmount)))
{
if (!material.HasFloat(FadeOn))
{
Debug.LogWarning($"{material.name} 没有 _FadeOn 属性,无法进行淡入淡出效果。");
continue;
}
fadeSequence.Join(material.DOFloat(endValue, FadeAmount, duration).From(startValue));
}
fadeSequence.Play();
}
}
}