Unity
iTween

iTweenのValueToのonupdateにラムダを使う方法

More than 3 years have passed since last update.


きっかけ

当たり前のように引数に渡そうとしたらメソッド名しか受け付けていなかったので。

公式にサポートする方法がある場合は教えて下さい。


iTweenを編集する

7039行目あたりのCallBackメソッドを以下のようにする。


iTween.cs

void CallBack(string callbackType){

if (tweenArguments.Contains(callbackType) && !tweenArguments.Contains("ischild")) {
//establish target:
GameObject target;
if (tweenArguments.Contains(callbackType+"target")) {
target=(GameObject)tweenArguments[callbackType+"target"];
}else{
target=gameObject;
}

//throw an error if a string wasn't passed for callback:
if (tweenArguments[callbackType] is Action<object>) {
((Action<object>)tweenArguments[callbackType]).Invoke((object)tweenArguments[callbackType + "params"]);
} else if (tweenArguments[callbackType].GetType() == typeof(System.String)) {
target.SendMessage((string)tweenArguments[callbackType],(object)tweenArguments[callbackType+"params"],SendMessageOptions.DontRequireReceiver);
}else{
Debug.LogError("iTween Error: Callback method references must be passed as a String!");
Destroy (this);
}
}
}



使い方

onupdateの次の部分にラムダを渡しています。

gameObjectの部分はたぶん何を渡しても動く気がします。

nullを渡すと怒られるのでgameObjectを渡しています。

本来の使い方ではないので,気持ち悪いところではあります。


sample.cs


void test(){
float targetValue = 0f;

iTween.ValueTo(gameObject, iTween.Hash("from", 0f, "to", 1f, "time", 1f, "onupdate", (Action<object>) (newValue => targetValue = (float)newValue) ));
}



参考

http://answers.unity3d.com/questions/490719/specifying-a-delegate-for-the-value-of-onupdate-in.html