【问题标题】:Unity Invoke Returning a ValueUnity 调用返回值
【发布时间】:2021-07-08 17:31:48
【问题描述】:

我在下面有一个 C# 方法(用于 Unity):

int CheckLength()
{
    Collider[] enemies = Physics.OverlapSphere(transform.position, transform.localScale.x);
    return enemies.Length;
}

我想延迟使用这个方法,所以我必须使用 Invoke() 方法。但问题是我无法获取方法的返回值,因为 Invoke() 方法的返回类型是 void。如何延迟使用此方法并获取返回值?

【问题讨论】:

  • How to delay code in Unity的方式有很多种..你最好的选择可能是How to return a value from a Coroutine?
  • 您的问题不清楚。如果您使用Invoke(),那么在代码实际执行之前不会有返回值,在最初调用Invoke() 的方法返回很久之后。如果你想要返回值,不要使用Invoke()。你为什么首先在这里使用Invoke()?推迟这个电话有什么好处?请改进问题,使其有意义。
  • @PeterDuniho 我的目标是延迟这个功能并获得它的价值。但正如您所说, Invoke() 不会返回值。我应该在 Update() 方法中使用这个函数。在我看来,在 Update() 方法中使用协程是不合适的。
  • @ThyRety 为什么? UpdateFixedUpdate 一直都在使用协程。如果您出于某种原因不想走这条路,async/await 是另一种选择。
  • 您能给我们一个明确的用例吗? 为什么你需要这个延迟?你打算如何使用它?

标签: c# unity3d return-value invoke


【解决方案1】:

有很多方法可以在延迟后获得“返回”值。

其中之一是给协程一个带有参数的动作作为“返回”或更准确地说不返回但继续。

using System;

.

void Start(){
    StartCoroutine(Return5AfterDelay(
        (returnedValue)=>{
            // after
            print(returnedValue);
            
        }
    ));
}

IEnumerator Return5AfterDelay(flood delay, Action<int> continueWith){
    yield return new WaitForSeconds(delay); 
    continueWith(5);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多