本日はUntiyでのスクリプトの勉強枠です。
〇UnityEventとは?
UnityEventを用いることでシーン中の複数のオブジェクトのメソッドを一度に実行することができます。
例えば、MRTKではアクションに対する反応で使用する[Interactable.cs]では[OnClick()]のイベントにUnityEventが使用されてることで一度のアクションでOnClickに登録されているオブジェクトのメソッドを一度に実行することができます。。
以下のようにOnClick()に登録されている場合アクション後は各オブジェクトは以下の状態になります。
・[Cube]が表示されます(アクティブ)。
・[Cube1]が非表示になります(ディアクティブ)。
・[Cube2]が表示されます。
・[Cube2]の[BoxCollider]がディアクティブ(無効化)になります。
[Interactable.cs]中身を見てみます。
/// <summary> /// Base onclick event /// </summary> public UnityEvent OnClick = new UnityEvent(); [SerializeField] private List<InteractableEvent> Events = new List<InteractableEvent>(); /// <summary> /// List of events added to this interactable /// </summary> public List<InteractableEvent> InteractableEvents { get { return Events; } set { Events = value; SetupEvents(); } } private List<InteractableThemeBase> activeThemes = new List<InteractableThemeBase>();
〇UnityEventを使う
UnityEventを使います。
Unityのレファレンスは以下になります。
UnityEventを使用するためにはNameSpaceに以下を使用します。
using UnityEngine.Events;
次にイベントを記述します。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class eventtest : MonoBehaviour { [SerializeField] UnityEvent Test = new UnityEvent(); // Start is called before the first frame update void Start() { }
これでUnityEventを使用できるようになりました。
次に設定したイベントを実行する処理を記述します。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class eventtest : MonoBehaviour { [SerializeField] UnityEvent Test = new UnityEvent(); // Start is called before the first frame update void Start() { ueTest(); } void ueTest() { Test.Invoke(); Debug.Log("test"); } }
UnityEvent.Invoke();
によって設定したイベントの処理を実行することができます。