Unity中关于AnimationEvent.Time的问题

Posted

技术标签:

【中文标题】Unity中关于AnimationEvent.Time的问题【英文标题】:Question about AnimationEvent.Time in Unity 【发布时间】:2021-07-12 18:16:57 【问题描述】:

我是 Unity 的新手,我有一个关于动画事件的简单问题。 在我的代码片段中,我有公共变量 - 我注意到我无法引用 AnimationEvent - 以及一些与它们相关的简单事情。

public GameObject completeLevelUI; // a panel
public Text endUI; // the text on the panel that show your success or fail
public AnimationEvent nextSceneEvent; // AnimatonEvent in the animation of the panel above

public void GameOver()  nextSceneEvent.time = 2; completeLevelUI.SetActive(true); endUI.text = "LEVEL\nFAILED"; 

public void GameWon()  nextSceneEvent.time = 6; completeLevelUI.SetActive(true); endUI.text = "LEVEL\nCOMPLETED"; 

public void LoadEnd()  SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); 

AnimationEvent 的目标方法为LoadEnd()默认触发时间为 1.5 秒,代码不会更改。

在共享代码中看不到我需要不同触发时间的原因 - 现在并不重要。我想出了一些其他的方法来解决它,我只是好奇为什么它不起作用。 我尝试更改激活和时间设置代码,但它是相同的。

我必须以某种方式引用 AnimationEvent?即使从没有 AnimationEvent 的地方多次调用此脚本是否也有问题 - 我在检查期间没有收到任何异常。

有什么想法吗?感谢您的帮助!

【问题讨论】:

你想对动画事件做什么?它触发并触发您的代码。你想用它做什么? 触发事件时会加载另一个场景(感谢您播放场景)。我希望下一个场景在 x 秒内加载,具体取决于胜利或死亡。 但是这里的重点——你在已发布的代码中看不到它——它对音量进行了一些修改。也许我会用 Invoke 来做...... 那么我认为你的做法是错误的。在战斗结束。设置一些你可以测试的东西,这意味着你的事件代码只是读取 if (get fight result == win) load win rlse load lost 【参考方案1】:

我猜你有一个动画正在播放,最后你想触发新场景。 您可以使用不同的方法。

首先,将动画事件直接添加到动画剪辑中,并在检查器中设置方法。该方法必须位于附加到与动画相同的游戏对象的组件上。

其次,你启动动画并等待它结束调用方法:

void EndProcess()

     StartCoroutine(EndProcessSequence());


IEnumerator EndProcessSequence()

    Animation anim = GetComponent<Animation>();
    anim.Play("animName");
    yield return new WaitWhile(()=> anim.isPlaying);
    LoadNewScene();
 

这是一个可重复使用的版本

IEnumerator EndProcessSequence(string animName, Action onComplete)
    
        Animation anim = GetComponent<Animation>();
        anim.Play(animName);
        yield return new WaitWhile(()=> anim.isPlaying);
        onComplete?.Invoke();
     

【讨论】:

以上是关于Unity中关于AnimationEvent.Time的问题的主要内容,如果未能解决你的问题,请参考以下文章

原创在Unity中关于多态转换与序列化保存的细节

Unity中关于NGUI的知识点

unity中关于锚点的相关知识

unity3d中关于tilemap的几点用法

《Unity3D 实战核心技术详解》书中关于矩阵的错误

UNITY与安卓⭐二AndroidStudio中关于通讯的使用教学