1
我有各种方法工作正常,但我想打电话给他们只有一段时间后。为了避免编写一个不同的方法所有这些我认为它更有利于Invoke
他们以某种方式。我制定了这些方法,以便排除Unity
的timeScale
,因此他们总是使用自定义构建的短函数等待Real seconds
。C#自定义调用方法来调用各种其他方法
的WaitForRealSeconds
:
public class WaitForRealSecondsClass
{
#region Wait for real seconds
public Coroutine WaitForRealSeconds(float aTime, MonoBehaviour mono)
{
return mono.StartCoroutine(_WaitForRealSeconds(aTime));
}
private IEnumerator _WaitForRealSeconds(float aTime)
{
while (aTime > 0.0f)
{
aTime -= Mathf.Clamp(Time.unscaledDeltaTime, 0, 0.2f);
yield return null;
}
}
#endregion
}
我想Invoke
我的Move function
方式:
public void InvokeAnim(float timeBeforeStart, Action<MonoBehaviour> MoveFunction, MonoBehaviour mono)
{
if (moveRoutine != null)
{
mono.StopCoroutine(moveRoutine);
}
moveRoutine = _InvokeAnim(timeBeforeStart, MoveFunction, mono);
}
IEnumerator _InvokeAnim(float timeBeforeStart, Action<MonoBehaviour> MoveFunction, MonoBehaviour mono)
{
yield return new WaitForRealSecondsClass().WaitForRealSeconds(timeBeforeStart, mono);
MoveFunction(mono);
}
而且Move(MonoBehaviour mono)
本身:
public void Move(MonoBehaviour mono)
{
if (moveRoutine != null)
{
mono.StopCoroutine(moveRoutine);
}
moveRoutine = _Move(from, to, overTime, mono);
mono.StartCoroutine(moveRoutine);
}
我测试工作是Move
本身,WaitForRealSeconds
我在另一个项目中用于UI等待游戏停止时,那很好。 正如我所说我有很多方法调用,所有他们返回void
并有一个参数MonoBehaviour
。目前它没有做任何事情,我不知道为什么。
这是所有伟大的,但..还有已经是这个'公共无效调用(字符串methodName中,浮动时间);'内**统一API方法**,所以你可以叫它就像'Invoke(“MeFancyMethodName”,0.5);''和'MeFancyMethodName'将在'0.5'秒延迟后被调用。 –
是的,但我**必须**通过'Monobehaviour',因为这些方法不是这样的后代。 AFAIK'Invoke(“Name”,time)'只能调用'void Name()'方法。 **编辑:** 他们不能'MonoBehaviours',因为我需要继承的力量,使这些方法发生。 – agiro
是的,这是正确的。但是你仍然可以创建一个_“wrapper”_,它将调用方法,然后用以前指定的参数调用你的方法。这将比从头开始更容易:) –