【问题标题】:Activate and Deactivate Invoke function激活和停用调用功能
【发布时间】:2018-04-13 07:56:48
【问题描述】:

我试图在 Unity 中使用 C# 语言延迟我的函数。通过使用Invoke,我实现了在光标移动到某个区域时添加延迟。但是,现在我需要在光标从该特定区域移动时取消Invoke。这个想法是,当我不小心将光标移动到该区域时,我可以取消那里调用的任何函数。 这是我当前的代码。

void SceneCall(){
    Application.LoadLevel (MainMenu);
}

void SceneCallIn(){
    Invoke ("SceneCall", 3f);
}
if (_newGameButton.Contains (Event.current.mousePosition)) {
        SceneCallIn();
    }

我尝试将CancelInvoke() 用作else,然后当我将光标移动到_newGameButton 时,它甚至不想再调用了。如何取消调用然后再次激活它?谢谢你的回答~

编辑:就像@Programmer 在 cmets 中所说,我真正想做的是当我的鼠标位于某个点时,计时器将开始计数。 3 秒后 MainMenu 场景将被加载。当计时器正在计数并且指针从该特定位置移开时,我希望计时器停止并且我不想再加载 MainMenu 场景。

【问题讨论】:

  • 嗯,当你再次调用“invoke”时,它只会再次调用它——没问题。
  • 我做对了把 CancelInvoke() 放在 else {} 下面 if (_newGameButton.Contains (Event.current.mousePosition)) 吗?因为它甚至在我将光标移动到 _newGameButton 之前就立即取消了调用?
  • @Mikuriin 让我明白这一点。当您的鼠标位于某个点时,计时器将开始计数。 3 秒后MainMenu 场景将被加载。当计时器正在计数并且指针从该特定位置移开时,您希望计时器停止并且您不想再加载 MainMenu 场景?
  • 天哪,对不起,我什至无法正确解释。是的,这就是我的意思@Programmer
  • 好的。你在哪个方法中放置了 if-else 块?

标签: c# unity3d


【解决方案1】:

如果你真的想要“翻转”等等,这里有一个完整的教程:

https://stackoverflow.com/a/36046495/294884

真的,你必须成为这一切的专家,然后才能做到。

但我必须再次告诉你:

15 年来,您永远不应该在界面中出于任何原因使用翻转。

【讨论】:

    【解决方案2】:

    我昨天遇到了同样的问题,但我解决了简单地再次调用调用方法。

    这是我的代码:

    public void OnGazeEnter()
    {
        InvokeRepeating("OnGazeStay", 0.0f, 1.0f / 30.0f);
    }
    public void OnGazeExit()
    {
        CancelInvoke("OnGazeStay");
    }
    

    在你的情况下,如果你想注册多个方法,你必须保存某种List<String> myMethods,这样你就可以删除你注册的每个方法。

    【讨论】:

    • 这是完全正确的。我会敦促您将 Debug.Log 语句添加到两者中。
    • 我同意,因为调试是了解算法流程和内部状态的最清晰方法
    • 谢谢@RonaldoFelipe!它正在工作。我刚刚意识到您使用三个函数:OnGazeEnterOnGazeStayOnGazeExit。结果我只用了两个,这就是为什么它没有用。
    • 是的,第三个被省略了,因为你的问题可能略有不同。
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2011-02-07
    • 2014-08-03
    • 1970-01-01
    相关资源
    最近更新 更多