コルーチンの最後にコールバックが必要なようです。
IEnumerator _Move(Transform from, Transform to, float overTime, Action /*<Parameter>*/ onCompletion = null)
{
// Your current code
if(onCompletion!= null)
{
onCompletion(/*parameters*/);
//or loop through the events?
}
}
EDIT:added onCompletion = nullですので、デフォルトのパラメータがあります。
コールバックのパラメータリストが異なる可能性があることを考慮すると、さまざまなオーバーロードが発生します。一般的なコードは、すべての異なるオーバーロードで呼び出されるメソッドへの移動となり、最後の部分のみが異なることになります。
void MoveItem(Transform from, Transform to, float overTime)
{
float step = Vector2.Distance(original, to.position) * (Time.deltaTime/overTime);
from.position = Vector2.MoveTowards(from.position, to.position, step);
}
IEnumerator _Move(Transform from, Transform to, float overTime, Action onCompletion = null)
{
Vector2 original = from.position;
float timer = 0.0f;
while (timer < overTime)
{
MoveItem(from, to, overTime);
timer += Time.deltaTime;
yield return null;
}
if(event != null)
{
event();
}
}
IEnumerator _Move(Transform from, Transform to, float overTime, Action <float>onCompletion = null)
{
Vector2 original = from.position;
float timer = 0.0f;
while (timer < overTime)
{
MoveItem(from, to, overTime);
timer += Time.deltaTime;
yield return null;
}
if(event != null)
{
event(10.0f);
}
}
あなたがいずれかを渡すことができますので、あなたはMoveItemメソッドのデリゲートを提供するために、柔軟性をプッシュすることができ(移動の形状は、線形、指数関数のいずれでもよい)。
こんにちは@agiro関数はお互いの間に依存関係がありますか?たとえば、スケールを呼び出すには、回転前などを呼び出す必要がありますか? –
ベースを 'MeEventArgs'にしてそれを派生させます(' MeTransformEventArgs')。 'MeEventHandler'は' public MeEventHandler'(MeEventArgs)、 'MeEventArgs(MeEventArgs)new MeTransformEventArgs(...))'のように使用できます。 –
説明のために編集されました。 @ErickGallani – agiro