129 lines
3.2 KiB
C#
129 lines
3.2 KiB
C#
using UnityEngine;
|
|
|
|
namespace Thousandto.Launcher.ExternalLibs
|
|
{
|
|
/// <summary>
|
|
/// 子节点网格的脚本
|
|
/// 此脚本只保存了,RuntimeMesh的一个对象
|
|
/// 可以被其他脚本用于来进行顶点修改
|
|
/// </summary>
|
|
public class VertexAnimateBaseScript : MonoBehaviour
|
|
{
|
|
#region //私有变量
|
|
[SerializeField]
|
|
private ChildMeshDataScript _script = null;
|
|
|
|
//记录回调函数
|
|
private SetNewVertexDelegate _setNewVertexHandler = null;
|
|
|
|
//记录当前帧增加的顶点值分量
|
|
private Vector3 _datV = Vector3.zero;
|
|
|
|
//开始进行动画
|
|
private bool _playing = false;
|
|
#endregion
|
|
|
|
#region//属性
|
|
|
|
//顶点的增加分量
|
|
public Vector3 DatVectex
|
|
{
|
|
get { return _datV; }
|
|
set { _datV = value; }
|
|
}
|
|
|
|
//是否正在播放
|
|
public bool Playing
|
|
{
|
|
get { return _playing; }
|
|
}
|
|
#endregion
|
|
|
|
#region//公共函数
|
|
public void SetRunTimeScript(ChildMeshDataScript script)
|
|
{
|
|
_script = script;
|
|
}
|
|
#endregion
|
|
|
|
#region //重写继承MonoBehaviour方法
|
|
//开始
|
|
private void Start()
|
|
{
|
|
OnStart();
|
|
}
|
|
//更新
|
|
private void Update()
|
|
{
|
|
if (_playing )
|
|
{
|
|
RefreshVertex();
|
|
}
|
|
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
}
|
|
|
|
//刷新顶点
|
|
private void RefreshVertex()
|
|
{
|
|
if (_setNewVertexHandler != null && _script.ChildMeshInfo != null && _script.enabled)
|
|
{
|
|
if (OnRefreshVertexBefore(ref _datV))
|
|
{
|
|
_script.ChildMeshInfo.RefreshVertex(_setNewVertexHandler);
|
|
OnRefreshVertexAfter(ref _datV);
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region//虚函数,有子类进行调用
|
|
|
|
protected virtual void OnStart()
|
|
{
|
|
_setNewVertexHandler = OnSetNewVertexHandler;
|
|
}
|
|
|
|
//刷新顶点之前这里对顶点的每个分量做增量结算
|
|
protected virtual bool OnRefreshVertexBefore(ref Vector3 datVertex)
|
|
{
|
|
datVertex.Set(0, 0, 0);
|
|
return false;
|
|
}
|
|
|
|
//刷新顶点完成后做其他处理
|
|
protected virtual void OnRefreshVertexAfter(ref Vector3 datVertex)
|
|
{
|
|
|
|
}
|
|
|
|
//设置新顶点的Handler处理
|
|
protected virtual void OnSetNewVertexHandler(ref Vector3 newV, ref Vector3 oldV, ref Color vcolor)
|
|
{
|
|
newV.x = oldV.x + _datV.x * vcolor.a;
|
|
newV.y = oldV.y + _datV.y * vcolor.a;
|
|
newV.z = oldV.z + _datV.z * vcolor.a;
|
|
}
|
|
|
|
//播放
|
|
protected virtual void Play()
|
|
{
|
|
_playing = true;
|
|
}
|
|
|
|
//停止
|
|
protected virtual void Stop()
|
|
{
|
|
_playing = false;
|
|
_datV.Set(0, 0, 0);
|
|
if(_script.ChildMeshInfo != null && _script.enabled)
|
|
_script.ChildMeshInfo.RefreshVertex(_setNewVertexHandler);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|