105 lines
3.0 KiB
C#
105 lines
3.0 KiB
C#
using CG.Framework;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Unity.VisualScripting;
|
|
using UnityEngine;
|
|
/// <summary>
|
|
/// 控制动画控制器,的脚本控制器
|
|
/// </summary>
|
|
namespace ZXK.GYJQR
|
|
{
|
|
public class AnimatorEventCtr : ClassSingleton<AnimatorEventCtr>
|
|
{
|
|
|
|
/// <summary>
|
|
/// 根据 控制器,切换过度条件的时候,播放动画
|
|
/// </summary>
|
|
/// <param name="animName"></param>
|
|
/// <param name="mAnim"></param>
|
|
/// <param name="Index"></param>
|
|
/// <param name="beginAction"></param>
|
|
/// <param name="endAction"></param>
|
|
public void Play(string animName, Animator mAnim, int index, Action beginAction = null, Action endAction = null)
|
|
{
|
|
//获取组件
|
|
if (mAnim.GetComponent<CustomAnimEvents>())
|
|
{
|
|
animEvents = mAnim.GetComponent<CustomAnimEvents>();
|
|
}
|
|
else
|
|
{
|
|
mAnim.GetOrAddComponent<CustomAnimEvents>();
|
|
animEvents = mAnim.GetComponent<CustomAnimEvents>();
|
|
}
|
|
|
|
|
|
//生成新的 控制动画器
|
|
mController = new AnimatorOverrideController();
|
|
mController.runtimeAnimatorController = mAnim.runtimeAnimatorController;
|
|
//给动画帧脚本的两个委托注册
|
|
animEvents.startCallBack = beginAction;
|
|
animEvents.endCallBack = endAction;
|
|
|
|
//设置动画帧数事件的内容
|
|
endEvt = new AnimationEvent();
|
|
endEvt.time = mController[animName].length;
|
|
startEvt = new AnimationEvent();
|
|
startEvt.time = 0;
|
|
//设置动画帧数名字
|
|
endEvt.functionName = "EndCallBack";
|
|
startEvt.functionName = "StartCallBack";
|
|
//给当前控制器的这个动画剪辑添加开始与结束帧数
|
|
AnimclipName = animName;
|
|
mController[animName].events = default;
|
|
mController[animName].AddEvent(endEvt);
|
|
mController[animName].AddEvent(startEvt);
|
|
|
|
//启动Animator
|
|
if (!mAnim.enabled) mAnim.enabled = true;
|
|
|
|
//切换过度条件。开始播放动画
|
|
mAnim.SetInteger("StepIndex", index);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 可选择
|
|
/// 清除动画帧数脚本
|
|
/// 是否重置脚本内容与动画帧数
|
|
/// </summary>
|
|
/// <param name="animName"></param>
|
|
/// <param name="mAnim"></param>
|
|
public void RemoveAnimEvents(string animName, Animator mAnim)
|
|
{
|
|
|
|
|
|
|
|
mController = new AnimatorOverrideController();
|
|
mController.runtimeAnimatorController = mAnim.runtimeAnimatorController;
|
|
mController[animName].events = default;
|
|
|
|
//Destroy(mAnim.GetComponent(typeof(CustomAnimEvents)));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CustomAnimEvents animEvents;
|
|
|
|
//控制动画器重写控制器的接口
|
|
//从而为给定化身定制动画。 在运行时基于相同的 AnimatorController 交换 Animator.runtimeAnimatorController 和 AnimatorOverrideController 不会重置状态机的当前状态
|
|
AnimatorOverrideController mController;
|
|
//当前动画剪辑的名称
|
|
public string AnimclipName;
|
|
///动画事件帧
|
|
// 结束帧
|
|
public AnimationEvent endEvt;
|
|
// 开始帧
|
|
public AnimationEvent startEvt;
|
|
}
|
|
} |