URL: http://atnd.org/events/34622
関数の引渡しがUnityScriptは楽だったが、Booではどうやるか調べた。
僕はUnityScriptが嫌いですが皮肉にもUnityScriptについては当ブログが情報量多いし一番わかり易いですねw(自画自賛乙)
参考にした
URL: http://stackoverflow.com/questions/275704/lambdas-in-boo
ではMain Cameraにアタッチする2つのスクリプト書いてみたよ。
※ちなみに今後はautopep8で整形して、クラス名と(の間のスペースをきちんと取り除いてからBooコード載せます。
・FuncTestSender.boo (以後センダーと呼ばせて)
こっちが関数送るよ
import UnityEngine class FuncTestSender(MonoBehaviour): def Start(): rcvr = GetComponent[of FuncTestReciever]() rcvr.Func = {x | Debug.Log(x + 2)} def Update(): pass
・FuncTestReciever.boo (以後レシーバと呼ばせて)
※こっちが関数を_func変数で受けるよ
import UnityEngine class FuncTestReciever(MonoBehaviour): [Property(Func)] private _func as callable(int) def Update(): if(_func): _func(1)
UnitySctiptの方が読みやすいかもしれないが、それは慣れていないだけと信じたい。
解説すると、センダーの↓はxという引数をもらって、Debug.Log(x + 2)という結果を返すよってこと。
{x | Debug.Log(x + 2)}
レシーバの
_func as callable(int)
で、「引数が"int'で、返り値"void"の関数」を変数として使えるってこと。
しかし、↓の書き方も許容した(@_@;)
_func as callable(int) as string
↓これが実際の関数の実行部分です。引数1を受け取りますってことです。
if(_func): _func(1)
分かりましたでしょうか?
分からなかったらコメントとかTwitterで聞けば説明します。
では次の方!