Unity脚本:在Animation中回调事件,从而实现更精准的Animation动作+游戏逻辑结合

查看: 74|回复: 0
[复制链接]

皇家骑士 发表于 2018-7-11 18:53:38 | 显示全部楼层

欢迎访问本论坛,注册你的账号并登录,来与我们交流吧!

欢迎 登录 与我们交流!没有帐号?立即注册

x
在Unity开发中经常会遇到需要在Animation的某个帧调用某些相关逻辑脚本并执行一系列逻辑动作的情况,但直接在Animation中调用“动作”会导致Animation变得非常臃肿和难以维护。
经过实践所得出,比较好的办法是在Animation的某帧中回调事件,随后在脚本中对应的事件内去添加需要的游戏逻辑。

以我所做的一个铁锤动画为例,这个铁锤需要在开始出现时播放提示音效,在砸中墙壁时播放砸中墙壁的音效,随后在完成铁锤的收回动画时摧毁这个铁锤对象。

形成下面的代码:

[C#] 纯文本查看 复制代码
using UnityEngine;

namespace DCGame
{
  public class MachineBossHammerController : DCMonoBehaviour
  {
    public AudioParameters audioRise;
    public AudioParameters audioHitted;

    [SerializeField] private GameObject rootNode;

    /// <summary>
    /// 用于在Animation中回调的事件
    /// </summary>
    public void OnHammerFinish()
    {
      enabled = false;
      Destroy(this);
      Destroy(rootNode);
    }

    /// <summary>
    /// 用于在Animation中回调的事件
    /// </summary>
    public void OnHammerRise()
    {
      PlayAudio2D(audioRise);
    }

    /// <summary>
    /// 用于在Animation中回调的事件
    /// </summary>
    public void OnHammerHitted()
    {
      PlayAudio2D(audioHitted);
    }
  }
}


对应在Animation中的使用方式:

~tick.jpg

~func.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表