Files
JJBB/Assets/Project/Script/Plugin/HealingLinkFxController.cs

50 lines
1.8 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using System.Collections;
public class HealingLinkFxController : LinkFxController
{
protected override bool isBillboard
{
get { return true; }
}
public float fadeDuration = 1f;
private float _startTime;
private const string _colorName = "_node_6990";
protected override MeshRenderer RegisterMeshMaterials()
{
materialRecords = new LinkFxMaterialRecord[3];
// Dummy仅仅用于测量长度不用于其它功能
var meshRenderer_0 = transform.Find("link_0").GetComponent<MeshRenderer>();
materialRecords[0] = new LinkFxMaterialRecord(meshRenderer_0.material, new[] {"_dif"});
var meshRenderer_1 = transform.Find("link_1").GetComponent<MeshRenderer>();
materialRecords[1] = new LinkFxMaterialRecord(meshRenderer_1.material, new[] {"_dif", "_node_1489_copy", "_alpha"});
var meshRenderer_2 = transform.Find("link_2").GetComponent<MeshRenderer>();
materialRecords[2] = new LinkFxMaterialRecord(meshRenderer_2.material, new[] {"_dif", "_node_1489_copy", "_alpha"});
return meshRenderer_0;
}
private void OnEnable()
{
_startTime = Time.unscaledTime;
}
public override bool TryUpdateLink()
{
var alpha = endTime - Time.time < fadeDuration ? Mathf.Clamp01((endTime - Time.time) / fadeDuration) : 1f;
// 特效默认alpha为0.5
alpha *= 0.5f;
SetAlpha(materialRecords[0].material, alpha);
SetAlpha(materialRecords[1].material, alpha);
SetAlpha(materialRecords[2].material, alpha);
return base.TryUpdateLink();
}
private static void SetAlpha(Material material, float alpha)
{
var color = material.GetColor(_colorName);
color.a = alpha;
material.SetColor(_colorName, color);
}
}