やりたいこと
Unityでボタンを押されたときに指定の処理を行うようにします。
検索すると日本語の記事も結構出てくる(おそらくUnity20XX)のですが、私のやり方が悪いのか、Unity6では動作しないのかうまくいきませんでした。
Unity6の環境で動作したやり方を紹介します。
実装
コードの登録
Hierarchyの+からCreate Emptyを選択し、空のGameObjectを作成します。
Hierarchyビューから作成した空のゲームオブジェクトを選択しInspectorを表示します。
Inspectorビュー下部のAddComponentを選択後New Scriptを選択し任意の名前を付けます。
作成したScriptを以下のように修正し保存します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Example : MonoBehaviour
{
public Button m_Button;
void Start()
{
m_Button.onClick.AddListener(() => ButtonClicked(42));//クリック時の関数を登録 42は任意の引数
}
void ButtonClicked(int buttonNo)////引数は必要な型に変更可能
{
Debug.Log("Button clicked = " + buttonNo);///ログ出力
/*クリック時の処理*/
}
}
ボタンの作成と登録
Hierarchyビューの+からUI→Canvasを選択してCanvasを作成します。(作成済みなら不要です)
続けてHierarchyビューの+からUI→Button – TextMeshProを選択してボタンを作成します。
上でコードを登録した空のGameObjectをHierarchyビューで選択します。
Hierarchyビューから作成したボタンをGameobjectのScriptに表示されるButtonにドラッグアンドドロップします。
結果
実行し、ボタンを押すとConsleビューにログが出力されました。
また参考にさせていただいたサイト(オフィシャルサイト)には他の関数の登録方法の記載もあります。ここでは一番汎用的な今回の方法を試して記載しました。他の方法も気になる方は下のリンクから確認してください。
参考にさせていただいたサイト
UI.Button-onClick - Unity スクリプトリファレンス
ボタンが押されたときに発生する UnityEvent
コメント