哇噢星球

 找回密码
 立即注册
搜索
热搜: 地形 技能 Lua

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

[复制链接]
皇家骑士 发表于 2018-7-11 18:53:38 | 显示全部楼层 |阅读模式
在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
回复

使用道具 举报

Archiver|手机版|小黑屋|哇噢星球  

GMT+8, 2019-2-21 10:13 , Processed in 0.067653 second(s), 17 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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