64 lines
1.5 KiB
C#
64 lines
1.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// 注意:尽量用协程代替动画,直接用动画同步会出现各客户端动画播放不一致的情况。
|
|
/// </summary>
|
|
public class FunctionSync_Animator : OneValueSyncObject
|
|
{
|
|
Animator anim;
|
|
List<string> state = new List<string>();
|
|
string currentTriger;
|
|
private void Start()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
if (!hasInit)
|
|
{
|
|
anim = GetComponent<Animator>();
|
|
InitDynamic("animator" + gameObject.name, CallBack, ValueType.String);
|
|
}
|
|
}
|
|
|
|
public void SetAnimatorState(string TriggerParameter)
|
|
{
|
|
if (!state.Contains(mystring))
|
|
{
|
|
state.Add(mystring);
|
|
}
|
|
currentTriger = mystring;
|
|
|
|
anim.SetTrigger(TriggerParameter);
|
|
mystring = TriggerParameter;
|
|
SendSync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 回调
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
private void CallBack(string id,bool isEnterRoom)
|
|
{
|
|
if(!state.Contains(mystring))
|
|
{
|
|
state.Add(mystring);
|
|
currentTriger = mystring;
|
|
anim.SetTrigger(mystring);
|
|
Debug.Log("动画同步:" + id + "," + mystring);
|
|
}
|
|
else
|
|
{
|
|
if (currentTriger!=mystring)
|
|
{
|
|
currentTriger = mystring;
|
|
anim.SetTrigger(mystring);
|
|
Debug.Log("动画同步:" + id + "," + mystring);
|
|
}
|
|
}
|
|
}
|
|
}
|