はらけんログ

unity触ったりバイクに乗ったり

【Unity】無名関数とかラムダ式とかいうやつ

C#でintとかstringみたいにSystem.Actionってのを引数にすれば関数を呼べるってことを最近知ったので使ってみてる。

例えば、下記の1と2は同じ処理だが1は引数の関数を実行するので、呼びたい関数を突っ込めばよい。

string log;

void Awake(){

    SendLog(SetLog); //1

    ActionLog();           //2

}

void SendLog(System.Action act){

    act();

    Debug.Log(log);

}

void SetLog(){

    log="Action!";

}

void ActionLog(){

    SetLog();

    Debug.Log(log);

}

 

ただ、困ったことにSetLogに引数がつけられない。

string log;

void Awake(){

    SendLog(SetLog("無理")); //エラー

}

void SendLog(System.Action act){

    act();

    Debug.Log(log);

}

void SetLog(string str){

    log=str;

}

 

で、無名関数とかラムダ式使うやつを使おうとおもった。

(引数)=>{処理}と書けば大丈夫らしい。

string log;

void Awake(){

    SendLog(()=>{log="ShimaRin"}); 

}

void SendLog(System.Action act){

    act();

    Debug.Log(log);

}

 

 書き方が独特なので覚えるのに時間かかったが、すごく便利なので多用していきたい。

が、これ処理のせいで動作が重くなったりしないかな。。。というとこだけ疑問。

 おかしなことしなければ大丈夫だとは思う。