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」_,它將調用方法,然後用以前指定的參數調用你的方法。這將比從頭開始更容易:) –