こんにちは、むたこなです。
Unityの勉強を始めると必ずと言っていいほど登場するのが、
ButtonのOnClickではないでしょうか?
しかし、初心者にとってはそもそも、
- ButtonのOnClickってなに?
- どうやって使うの?
- どういう仕組みなの?
といった疑問を持つのではないでしょうか?
本ブログではこのような疑問にお答えします。
超基本だからこそ押さえておきたいButtonのOnClickをぜひ習得してください!
ButtonのOnClickってなに?
ButtonのOnClickとはButtonがクリックされたときに実行されるUnityEventです。
要約すると、ボタンが押されたときに実行する処理を登録できる場所ということになります。
どうやって使うの?
ButtonのOnClickはクリック時に実行したい関数を登録して使用します。
登録方法は2種類の使い方があります。
Inspectorからアタッチする
一番簡単な方法です。
手順は以下の通りです。
1. スクリプトを用意する
ボタンを押した際に実行したい処理が書かれたスクリプトを用意します。
今回はデバックログに「Clicked!」と表示されるような関数OnClickを用意しました。
なお、関数のアクセス修飾子はpublicにしてください。
public class SampleClass : MonoBehaviour
{
public void OnClick()
{
Debug.Log("Clicked!");
}
}
2. 任意のGameObjectにアタッチする
任意のGameObjectにアタッチします。
Inspectorから登録する場合は、
登録したい処理が書かれたスクリプトがGameObjectにアタッチされている必要があります。
3. OnClickにInspectorから登録する
対象のButtonのInspectorを開き、OnClickの+ボタンを押して項目を増やします。
None(object)と書かれた欄に先ほど作成したスクリプトがアタッチされたGameObjetをアタッチします。
No Functionと書かれたドロップダウンから、
先ほど作成したクラス名→実行したい関数名
を順にクリックします。
これで登録作業は完了です!
スクリプトから登録する
ButtonのOnClickはスクリプトから関数を登録することも可能です。
1. Buttonを参照する
何らかの方法で対象のButtonを参照してください。
GetComponentを使った方法や、SerializeFieldしてInspectorからアタッチするなど
どのような方法でも構いません。
2. AddListenerをする
OnClickのクラスであるUnityEventにはAddListenterという関数が用意されており、
これを使って処理を登録します。
以上で登録作業は完了です!
以下にサンプルコードを置いておきます。
using UnityEngine;
using UnityEngine.UI;
public class SampleClass : MonoBehaviour
{
[SerializeField] Button button;
private void Start()
{
button.onClick.AddListener(OnClick);
}
private void OnClick()
{
Debug.Log("Clicked!");
}
}
どういう仕組みなの?
冒頭のButtonのOnClickってなに?でほとんど説明してしまいましたが、
OnClickの正体はUnityEventです。
UnityEventは複数のデリゲートを保持し、
任意のタイミングでそれらを実行することができるクラスです。
実行される順番は登録された順となります。
余談ですが、OnClickのようにあるイベントが発生した際に実行される事を、
プログラムの世界ではコールバックと呼びます。
(言語によって様々な呼び方があります。)
特にUIなどユーザーから特定の操作が行われた際に処理を行う状況でよく利用されます。
その他、コールバックついてもっと詳しく知りたい方は、
以下のキーワードを使って検索してみてください。
勉強のお役に立つと思います。
デリゲート / イベント / オブザーバー / System.Action
まとめ
ButtonのOnClickについて解説しました。
Unityを使う以上避けて通れない機能だと思いますので、
ぜひ本記事を活用してマスターしてみてください!
皆さんの努力のサポート
この記事を書いた筆者はUnityの初心者向けレッスンを行っております。
- 一人だと理解できない
- モチベーションが続かない
- スクールだと値段が高すぎる
このような悩みを持った方がいらっしゃればサポートしたいと思っております。
ご興味あれば覗いてみてください。
コメント