uGUI イベント – ButtonとToggle

公開日:2017年11月17日
使用Unity Version:2017.2.0f3

UnityのuGUIのイベント、今回はButtonのクリックまたはタップ、Toggleの切り替えについて記述します。

イベントを受け取る Scriptの作成

まずイベントを受け取るScriptを定義します。

[EventCatcher.cs]
using UnityEngine;
public class EventCatcher : MonoBehaviour {
	// Buttonのイベント取得
	public void OnButtonClicked() { 
		Debug.Log("Click Button");
	}
}

Sceneに、空のEventObjectを配置し、Scriptをコンポーネントとして追加します。本投稿では空のEventObjectに設定しますが、追加先は他のGameObject(Canvasなど)でも構いません、アプリケーションに合わせて下さい。

Buttonクリックイベント

まずSceneにCanvasを追加します。Canvasを追加すると同時にEventSystemも追加されます。このEventSystemがイベント検知などを内部的に行うようです。

ちなみに、別のSceneにCanvasだけコピーすると、Buttonクリックなどのイベントが発生しなくなります。その場合は、手動でEventSystemを追加すればイベントが発生するようになります。

Buttonを配置し、Inspectorにある「Button → OnClick () → +」をクリックしてイベントの通知先を追加します。

追加された項目の、以下の部分をクリックし、イベントの通知先のGameObjectを設定します。

次にクリックされた時に呼び出される関数を設定します。
今回は「EvetCatcherのOnButtonClicked」を選択します。

再生して、Buttonをクリックすると、 Consoleにログが出力されます。
Consoleが表示されていない場合は「メニューのWindow → Console」で表示できます。

Toggleの切り替えイベント

CanvasにToggleを配置し、Inspectorにある「Button → On Value Changed (Boolean) → +」をクリックしてイベントの通知先を追加します。

「On Value Changed (Boolean)」に対応する関数をScriptに追加します。

[EventCatcher.cs]
using UnityEngine;
public class EventCatcher : MonoBehaviour {
	// Buttonのイベント
	public void OnButtonClicked() {
		Debug.Log("Click Button");
	}
	// Toggleのイベント
	public void OnToggleChanged(bool v)
	{
		Debug.Log("Click Toggle[" + v + "]");
	}
}

Buttonの時と同じように「EVentCatcherのOnToggleChanged(bool)」を選択します。

再生して、Toggleをクリックすると、 Consoleにログが出力されます。

うまくいったように思うのですが、よく見ると引数vの値が常にFalseです!
Unityのアニュアルには以下のように記述されているので、これで正しいように思えるのですが。。。

A UnityEvent that is invoked when the Toggle is clicked. The event can send the current state as a bool type dynamic argument.

ネットで調べて見ると、Sliderで同じような現象が発生し、対処した方がいました。その方の情報を参考にScriptを書き換えます。

[EventCatcher.cs]
using UnityEngine;
using UnityEngine.UI;
public class EventCatcher : MonoBehaviour {
	// Buttonのイベント
	public void OnButtonClicked() {
		Debug.Log("Click Button");
	}
	// Toggleのイベント、引数はtoggle 
	public void OnToggleChanged(Toggle toggle)
	{
		// ToggleのON/OFFはisONで判断できる
		Debug.Log("Click Toggle[" + toggle.isOn + "]");
	}
}

「On Value Changed (Boolean)」に対応する関数を再設定します。

引数が「None(Toggle)」になりますので、 Toggle自身をドラッグします。

再生して、Toggleをクリックします。

今度はちゃんと、 Toggleの状態が取得できました。



前の投稿

Scroll View

コメントを残す

メールアドレスが公開されることはありません。