public override IClonable Clone() { DATA_AnimStateSynchronizer_Trigger newData = base.Clone() as DATA_AnimStateSynchronizer_Trigger; newData.AnimatorParameterName = AnimatorParameterName; newData.AnimationKeyEventData = AnimationKeyEventData; return(newData); }
// Usefull to sync ablity animation! public bool TrySyncAnimState(DATA_AnimStateSynchronizer assync, bool value = false) { // Way A: Try get the anim synchronizer as trigger. DATA_AnimStateSynchronizer_Trigger tmp = assync as DATA_AnimStateSynchronizer_Trigger; if (tmp) { // Step A.1: Check if there is the method to procedurally invoke the parameter triggering for this anim sync. if (!RuntimeAnimatorSynchronizerEvents.ContainsKey(assync)) { // If not, create the lambda and store it in a map using the anim sync as key. RuntimeAnimatorSynchronizerEvents.Add(tmp, () => { tmp.AnimatorParameterName.Trigger(OwnAnimator); }); } // Step A.2: Bind delegate "Response" of the anim synchronizer to the wanted event (which may be raised from the animation clip). BindRuntimeAnimSyncResponse(assync); AnimatorClipInfo[] a = OwnAnimator.GetNextAnimatorClipInfo(0); for (int i = 0; i < a.Length; ++i) { Verbose(VerboseMask.Log, "Current clip BEFORE invoke:" + a[i].clip.name); } // Step A.3: Trigger the parameter. RuntimeAnimatorSynchronizerEvents[tmp].Invoke(); a = OwnAnimator.GetNextAnimatorClipInfo(0); for (int i = 0; i < a.Length; ++i) { Verbose(VerboseMask.Log, "Current clip AFTER invoke:" + a[i].clip.name); } return(true); } // Way B: Same as way A for boolean parameters. DATA_AnimStateSynchronizer_Bool tmp2 = assync as DATA_AnimStateSynchronizer_Bool; if (tmp2) { if (!RuntimeAnimatorSynchronizerEvents.ContainsKey(assync)) { RuntimeAnimatorSynchronizerEvents.Add(tmp2, () => { tmp2.AnimatorParameterName.SetData(value, OwnAnimator); }); } Verbose(VerboseMask.Control, "Current clip BEFORE invoke:" + OwnAnimator.GetCurrentAnimatorClipInfo(0)[0].clip.name); BindRuntimeAnimSyncResponse(assync); RuntimeAnimatorSynchronizerEvents[tmp2].Invoke(); Verbose(VerboseMask.Control, "Current clip AFTER invoke:" + OwnAnimator.GetCurrentAnimatorClipInfo(0)[0].clip.name); return(true); } return(false); }