2017-02-09 23 views
1

私はさまざまな方法が問題なく動作していますが、遅延の後にのみ呼び出したいと思います。 のために別の方法を書くのを避けるために、私はそれが何とかしてInvokeに有益だと考えました。私は、の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を持っています。現在は何もしていませんし、理由もわかりません。

+0

すべて素晴らしいことだけど...この 'ます。public void呼び出します(文字列methodNameの、フロート時間)がすでにあります;' **ユニティAPI内のメソッドは**あなただけ呼び出すことができますので、 'Invoke(" MeFancyMethodName "、0.5);と' MeFancyMethodName'は '0.5'秒遅れの後に呼び出されます。 –

+0

はい、私は**これらの方法はその子孫ではないので、** Monobhaviourを渡す必要があります。 AFAIK 'Invoke(" Name "、time)'は 'void Name()'メソッドだけを呼び出すことができます。 **編集:** これらのメソッドを実現するために継承の力が必要だったので、それらは「MonoBehaviours」になることはできません。 – agiro

+0

はい、正しいです。しかし、それでも、以前に指定されたパラメータでメソッドを呼び出すメソッドを呼び出す_ "ラッパー" _を作ることができます。 –

答えて

3

これは、私は実際にを忘れてしまいました。そのコルーチンを開始してください。私Invoke

 public void InvokeAnim(float timeBeforeStart, Action<MonoBehaviour> MoveFunction, 
     MonoBehaviour mono) 
    { 
     if (moveRoutine != null) 
     { 
      mono.StopCoroutine(moveRoutine); 
     } 
     moveRoutine = _InvokeAnim(timeBeforeStart, MoveFunction, mono); 
     mono.StartCoroutine(moveRoutine); //one line was missing 
    } 
    IEnumerator _InvokeAnim(float timeBeforeStart, Action<MonoBehaviour> MoveFunction, 
     MonoBehaviour mono) 
    { 
     yield return new WaitForRealSecondsClass().WaitForRealSeconds(timeBeforeStart, mono); 
     MoveFunction(mono); 
    } 
関連する問題