44 lines
1.2 KiB
C#
44 lines
1.2 KiB
C#
using UnityEngine;
|
||
|
||
|
||
namespace TH1Renderer.Prefab{
|
||
[RequireComponent(typeof(SpriteRenderer))]
|
||
public class SyncAlphaToChildren : MonoBehaviour
|
||
{
|
||
private SpriteRenderer _selfRenderer;
|
||
private float _lastAlpha;
|
||
|
||
private SpriteRenderer[] _childRenderers;
|
||
|
||
private void Awake()
|
||
{
|
||
_selfRenderer = GetComponent<SpriteRenderer>();
|
||
_lastAlpha = _selfRenderer.color.a;
|
||
|
||
// 获取所有子物体的 SpriteRenderer(不包括自己)
|
||
_childRenderers = GetComponentsInChildren<SpriteRenderer>(includeInactive: true);
|
||
}
|
||
|
||
private void Update()
|
||
{
|
||
float currentAlpha = _selfRenderer.color.a;
|
||
if (!Mathf.Approximately(currentAlpha, _lastAlpha))
|
||
{
|
||
_lastAlpha = currentAlpha;
|
||
UpdateChildrenAlpha(currentAlpha);
|
||
}
|
||
}
|
||
|
||
private void UpdateChildrenAlpha(float alpha)
|
||
{
|
||
foreach (var renderer in _childRenderers)
|
||
{
|
||
if (renderer == null || renderer == _selfRenderer) continue;
|
||
|
||
Color c = renderer.color;
|
||
c.a = alpha;
|
||
renderer.color = c;
|
||
}
|
||
}
|
||
}
|
||
} |