Unity动画执行代码封装 循环执行 与 执行一次后运行其他逻辑等

公司的项目里 需要大量的动画 因此专门封装了一个关于动画的类 只要挂载在存在Animator动画组件的物体上 就可以直接调用函数 初学自用 分享思路 以后技术上来了 会继续更新修改

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class AniObj : MonoBehaviour
{
    private Animator _animator;
    private string _aniName;
    private Action _onTrigger;
    public bool IsPlay;
    // Start is called before the first frame update
    void Start()
    {
        
    }
    private void OnEnable()
    {
        Init();

    }
    // Update is called once per frame
    void Update()
    {
        if (IsPlay)
        {
            AnimatorStateInfo animatorInfo;
            animatorInfo = _animator.GetCurrentAnimatorStateInfo(0);
            string animString = _animator.GetCurrentAnimatorClipInfo(0)[0].clip.name;

            if ((animatorInfo.normalizedTime > (1f-Time.deltaTime)) && (animString == _aniName))
            {
                _onTrigger();
                IsPlay = false;
            }

        }
    }
    void Init()
    {
        _animator = GetComponent<Animator>();
    }
    /// <summary>
    /// 运行一次动画
    /// </summary>
    /// <param name="aniName"></param>
    /// <param name="boolName"></param>
    /// <param name="onStart"></param>
    /// <param name="onTrigger"></param>
    public void PlayOne(string aniName, string boolName, Action onStart,  Action onTrigger)
    {
        _aniName = aniName;
        _onTrigger = onTrigger;
        onStart();
        _animator.SetBool(boolName, true);
        IsPlay = true;
    }
    /// <summary>
    /// 打开动画
    /// </summary>
    /// <param name="boolName"></param>
    public void PlayLoop(string boolName)
    {
        _animator.SetBool(boolName, true);
    }
    /// <summary>
    /// 关闭动画
    /// </summary>
    /// <param name="boolName"></param>
    public void Stop(string boolName)
    {
        _animator.SetBool(boolName, false);
    }
    /// <summary>
    /// 设置动画层
    /// </summary>
    /// <param name="name"></param>
    /// <param name="num"></param>
    public void SetLayerWeight(string name,float num)
    {
        _animator.SetLayerWeight(_animator.GetLayerIndex(name), num);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值