URL: http://atnd.org/events/34622
delegateとラムダ式の組み合わせをしたいです。
地球上に唯一存在しているこのBoo本から引用
まずC#で紹介します
・LambdaTestCS.cs
→ これをCubeとかにアタッチしておきます。
OnMouseOverというMonoBehaviourのメソッドがUnityが用意してくれるので、
マウスをCubeに重ねるとイベントが発生し、Cube is Clikedと表示されるはずです。
using UnityEngine; public class LambdaTestCS : MonoBehaviour { public delegate void EventHandler (GameObject e, string a); public event EventHandler MouseOver; void Awake() { // add MouseOver += (e, a) => Debug.Log(e.name + " is " + a); } void OnMouseOver () { if (MouseOver != null) MouseOver (this.gameObject, "Clicked"); } }
これをBooで置き換えます。
・LambdaTestBoo.boo
import UnityEngine class LambdaTestBoo (MonoBehaviour): public callable EventHandler (e as GameObject, a as string) public event MouseOver as EventHandler def Awake (): // add MouseOver += { e, a | Debug.Log(e.name + " is " + a) } def OnMouseOver (): if MouseOver != null: MouseOver (self.gameObject, "Clicked")
delegateがcallableになっても文字数節約できない(8文字->8文字)し、
唯一得するのは引数を使用しなければ”省略できる”点かな?C#もだっけ?
MouseOver += { Debug.Log("Clicked") }
次の方よろしくです。
次はBooのリストの便利なテクを紹介すると思います。