二、动画——02、动画事件

作者: GameObjectLgy | 来源:发表于2020-08-18 00:37 被阅读0次

目的:精确控制动画某一帧发生的事件,常用来校对同步效果。

  • 实现方式一:在动画面板插入事件


    image.png

    这个脚本的object选项必须选带实现这个事件方法的脚本来接收。

public class GooseAnimationEvent : MonoBehaviour
    {
        Animationer animationer;

        private void Start()
        {
            animationer = this.GetComponent<Animationer>();
        }

        public void AnimationEventStartSpark(string msg)
        {
                Debug.Log("收到动画事件");
                //do something
        }
    }

以上两种方法Object赋值的都是你的脚本。

注意:这个事件脚本必须挂在这个物体带有Animator的物体上(其他物体不行)。否则会出现如下错误:
'NoviceKnight' AnimationEvent 'Skode_ActiveIdleLoop' has no receiver! Are you missing a component?
有时候如果你在使用别人的动画时莫名其妙报这个错误,就要去看看引入的动画是不是带了动画事件。

  • 实现方式二:全部在代码里添加
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeTest : MonoBehaviour
{
    Animation _anim;

    public GameObject target;

    private AnimationClip clip;

    void Start()
    {
        _anim = GetComponent<Animation>();

        clip = _anim.GetClip("cube2");

        AddAnimationEvent();

        if (_anim != null)
        {
            _anim.Play("cube2");
        }
    }

    /// <summary>
    /// 代码中自定义事件
    /// </summary>
    public void AddAnimationEvent()
    {

        //创建动画事件
        AnimationEvent animationEvent = new AnimationEvent();
        //设置事件回掉函数名字
        animationEvent.functionName = "CallFuncation";
        //传入参数
        animationEvent.objectReferenceParameter = target;
        //设置触发帧
        animationEvent.time = 1f;
        //注册事件
        clip.AddEvent(animationEvent);
    }

    /// <summary>
    /// 动画帧事件 
    /// </summary>
    public void CallFuncation()
    {
        Debug.Log("Animation Event Triggered !");
    }
}
3.gif
  • 实现方式三:针对在Unity里自带的动画编辑器制作的动画,也可以在这样添加


    image.png

    对应修改的代码:

public class CubeTest : MonoBehaviour
{
    Animation _anim;

    public GameObject target;

    private AnimationClip clip;

    void Start()
    {
        _anim = GetComponent<Animation>();

        clip = _anim.GetClip("cube1");
        //clip = _anim.GetClip("cube2");

        AddAnimationEvent();

        if (_anim != null)
        {
            _anim.Play("cube1");
            //_anim.Play("cube2");
        }
    }

    /// <summary>
    /// 代码中自定义事件
    /// </summary>
    public void AddAnimationEvent()
    {

        //创建动画事件
        AnimationEvent animationEvent = new AnimationEvent();
        //设置事件回掉函数名字
        animationEvent.functionName = "CallFuncation";
        //传入参数
        animationEvent.objectReferenceParameter = target;
        //设置触发帧
        animationEvent.time = 1f;
        //注册事件
        clip.AddEvent(animationEvent);
    }

    /// <summary>
    /// 动画帧事件 
    /// </summary>
    public void CallFuncation()
    {
        Debug.Log("Animation Event Triggered !");
    }

    public void CallFunctionCube1()
    {
        Debug.Log("这是动画cube1");    
    }
}

其他问题:
有可能会遇到的问题,动画使用时报动画事件没有接收者的错误,那是因为在导入别人的动画时,动画本身带了事件,去掉即可解决。

相关文章

  • JS中的动画事件和过渡事件

    动画事件 动画事件demo 过渡动画事件 过渡动画事件demo

  • day 11

    01 pygame 事件 02 pygame 鼠标事件 03 py game键盘事件 04 动画效果 05 多球效果

  • (新年快乐)童话故事有权书,对小孩帮助学习,

    本剧动画(2017月02月02号) (2017年02月02号)随便载图写出耶稣动画版型,那时候刚刚看动画版本权小说...

  • day11pygame(2)

    01event 02-鼠标事件得应用 03鼠标点击事件 04-动画效果 05-ballgame

  • 小程序动画创建及动画结束的监听事件

    小程序动画创建 绑定动画数据 设置动画 监听动画事件(开始,结束) 动画执行过程中使用 bindtransitio...

  • Day11 pygame应用

    01.pygame事件 02.鼠标事件的应用 03.鼠标事件的应用2 04.动画效果 05.ballGame 06...

  • day11-pygame

    01-pygame事件 02-鼠标事件的应用1 03-鼠标事件的应用2 04-动画效果 05-ballgame 0...

  • JS第七天-02

    JS动画 一、JS结合CSS实现动画 1、通过事件修改指定的样式,形成过渡的第二状态 2、通过事件修改指定的类名,...

  • 027 JS动画

    JS动画 一、JS结合CSS实现动画 1、通过事件修改指定的样式,形成过渡的第二状态 2、通过事件修改指定的类名,...

  • 在山西太原,做个二维动画需要哪些制作流程?

    二维动画有哪些类型? flash动画,课件动画,mg动画,ae动画,GIF动画,手绘动画,网页动画,企业动画,宣传...

网友评论

    本文标题:二、动画——02、动画事件

    本文链接:https://www.haomeiwen.com/subject/jesgdktx.html