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
を持っています。現在は何もしていませんし、理由もわかりません。
すべて素晴らしいことだけど...この 'ます。public void呼び出します(文字列methodNameの、フロート時間)がすでにあります;' **ユニティAPI内のメソッドは**あなただけ呼び出すことができますので、 'Invoke(" MeFancyMethodName "、0.5);と' MeFancyMethodName'は '0.5'秒遅れの後に呼び出されます。 –
はい、私は**これらの方法はその子孫ではないので、** Monobhaviourを渡す必要があります。 AFAIK 'Invoke(" Name "、time)'は 'void Name()'メソッドだけを呼び出すことができます。 **編集:** これらのメソッドを実現するために継承の力が必要だったので、それらは「MonoBehaviours」になることはできません。 – agiro
はい、正しいです。しかし、それでも、以前に指定されたパラメータでメソッドを呼び出すメソッドを呼び出す_ "ラッパー" _を作ることができます。 –