UnityのButton【使い方とスクリプト】【UGUI】

component thumbnail

この記事はUnityのコンポーネントButtonについて解説しています。

<Buttonとは>

ButtonはUnityでUI作りを便利にするUGUIという機能の中の1つです。

button

UGUIが何かわからない人は↓の記事で解説していますので参考にしてみください。

UIのボタンを作るのに便利です。ヒエラルキーで右クリック>UI>Buttonで作成できます。

create button

すると↓のようになります。

button hierarchy

Buttonを作成すると同時にTextの子オブジェクトを作成します。

ボタンの所に「Button」という文字が表示されているのはTextの機能でButtonの機能ではありません。また、Buttonの見た目はButtonと一緒についているImageによって決まります。

このオブジェクトはCanvasの子オブジェクトになっていないと表示されません。また、シーン中にEventSystemがない場合は動作しないので気をつけてください。

↓Buttonと完成の高い記事をまとめてみましたので参考にしてみてください。

Buttonと関連性の高い記事

<Buttonを使う際の注意点>

Buttonを複数配置したりすると、ボタン同時押しができてしまうため、スクリプトで制御しなければいけません。また、連打対策もしておかないと何度も押されてしまうので、注意が必要です。

シーンが切り替わる際にもフェードなどを入れているとフェード中に押されてしまうので、対策を入れる必要があります。

<Buttonのインスペクター>

button inspector
クリックすると展開します

Interactable

このボタンが有効か無効かの状態です。チェックが外れているとデフォルトではグレーがかって押せないような雰囲気になります(設定によって変わります)。enabledとの違いは、このグレーがかかるかどうかです。

Transition

ボタンを押した際やボタンが無効な状態変化を設定します。

transition none

ボタンの状態に関わらず何も変わりません。

ボタンの状態変化を色で表します。

transition color tint

・Target Graphic

色を変えるImageを指定します。

・Normal Color

通常の状態の色を指定します。

・Highlighted Color

マウスカーソルがボタンにのったときや、カーソルキー、ジョイスティックなどでボタンが選択されている状態の色を指定します。

・Pressed Color

ボタンが押された時の状態の色を指定します。

・Disable Color

ボタンが無効な状態の色を指定します。

・Color Multiplier

設定した色の明るさの倍率を設定します。各ColorにこのColor Multiplierの値が乗算されるのですが、Unityの標準のUIシェーダーではColorはColor Multiplierを使っても255を超えられませんので元の画像を暗く作っておく必要があります。

・Fade Duration

色が変化し終わるまでの秒数を指定します。値が小さいほど素早く変化します。

ボタンの状態変化を画像で表します。各種パラメータにその際の画像を指定します。

transition sprite swap

・Target Graphic

画像を変えるImageを指定します。

・Highlighted Sprite

マウスカーソルがボタンにのったときや、カーソルキー、ジョイスティックなどでボタンが選択されている状態の時に変わる画像を指定します。

・Pressed Sprite

ボタンが押された状態の時に変わる画像を指定します。

・Disable Sprite

ボタンが無効な状態の時に変わる画像を指定します。

ボタンの状態変化をアニメーションで表します。各種パラメータにその際、アニメーターに送るTriggerの名前を指定します。そのため、Animatorと一緒に使用されます。

transition animation

・Highlighted Trigger

マウスカーソルがボタンにのったときや、カーソルキー、ジョイスティックなどでボタンが選択されている状態の時に変わる画像を指定します。

・Pressed Trigger

ボタンが押された状態の時に変わる画像を指定します。

・Disable Trigger

ボタンが無効な状態の時に変わる画像を指定します。

・Auto Generate Animation

このゲームオブジェクトにAnimatorがセットされていない場合、このボタンを押すことで自動でAnimatorの設定をやってくれます。

↓押した後

set animator

↓作成されたアニメーターの中身です。

animation window

ただし、各種アニメーションの中身には何も設定されていないのでアニメーションは自分で設定する必要があります。

Navigation

Buttonに限らず、選択可能なUGUIの選択状態をどういった順番にするのかを指定できます。Tabキーや上下左右のボタンを押した時、次に選択するのがどのUGUIにするのかということを決めます。

・None

選択状態は移行しません。

・Horizontal

水平方向に選択状態を移行します。

・Vertical

垂直方向に選択状態を移行します。

・Automatic

Unityが自動で選んでくれた選択状態へ移行します。

・Explicit

次へ移行する選択状態を自分で指定します。↓の各種要素の中に次へ移行するオブジェクトを選択します。

navigation explicit

・Visualize

このボタンを押すことで次へ移行する選択状態の導線を視覚化してくれます。これはゲーム本体には関係なく、編集をやりやすくしてくれる機能です。

OnClick

ボタンが押された時のイベントを発行します。+を押すことでイベントを送る対象を増やし、−で減らすことができます。

onclick

・Off

このボタンを押してもイベントは発生しません

・Runtime Only

ゲームを再生中のみイベントを発生させます。

・Editor And Runtime

ゲームを再生していなくなても再生していてもイベントを発生させます。

・イベントを送るゲームオブジェクト

ボタンが押された時、イベントを送るにはイベントを送るゲームオブジェクトを選択します。

ゲームオブジェクトは+を押すことで増やすことができます。

set onclick method

ゲームオブジェクトを設定したら、そのゲームオブジェクトについているコンポーネントの中に存在する関数を選択して、その関数に対してイベントを送ることができます。

呼び出される関数はpublicで戻り値はvoidである必要があります。また引数をint,float,string,bool,Objectの中からいづれか一つ選ぶこともできます。

ボタンが押された時、その関数が呼ばれます。例えば

public void TestClick()
{
 Debug.Log("ボタン押した");
}

という関数を書いたスクリプトを書いてゲームオブジェクトにアタッチして、TestClickを選択すれば、ボタンを押した時に、コンソールに「ボタンを押した」と表示されます。

スポンサーリンク

<Buttonのスクリプトの使い方>

名前空間UnityEngine.UI
class
継承UI.Selectable

デフォルトの状態から使用するには

using UnityEngine.UI;

と記述するか

UI.Text

とする必要があります。

クリックすると展開します

onClick

ボタンが押されたときに呼び出されるUnityEventです。

ボタンを押すというのは、押し込んだ後、離した瞬間を指します。

型 UI.Button.ButtonClickedEvent型

○ 使い方
ボタンを押した際にする処理を追加したい場合などに使用します。インスペクターからも設定できるので、動的に設定したい場合などに使用します。(インスタンシェード時など)

//ボタンを押した場合の処理を追加します。
Button b = GetComponent<Button>();
b.onClick.AddListener(()=> Debug.Log("ボタンを押した"));

OnPointerClick

一応、外からこの関数を呼び出すと、あたかもボタンを押したような挙動を取ることも可能ですが、この関数は通常の関数のようには使用しません。

UnityEngine.EventSystems.IPointerClickHandlerを継承したスクリプトにOnPointerClickという関数を作り、引数にPointerEventDataを受け取るようにし、Buttonと同じゲームオブジェクトにそのスクリプトをアタッチすると、ボタンがタップ、もしくはマウスによるクリックによって押された際、その関数が呼ばれます。

1. ボタンのタップやマウスクリックによる情報 : EventSystems.PointerEventData型

戻り値(返り値)

なし

○ 使い方
ボタンに対するイベントを独自に制御したい場合などに使用します。

//ボタンに対するイベントを独自制御するスクリプトを作成します。
using UnityEngine;
using UnityEngine.EventSystems; 
public class Test : MonoBehaviour, IPointerClickHandler
{
 public void OnPointerClick( PointerEventData eventData )
 {
  Debug.Log( "ボタンを押した" );
 }
}

↑のようなスクリプトをButtonと同じゲームオブジェクトにアタッチし、ボタンを押すと、この関数の中に入ってきます。この時のボタンを押すの定義は押し込んで離した瞬間です。

OnSubmit

機能としては↑のOnPointerClickとほぼ一緒です。違いはタップやマウスによるクリックではなく、Input Managerから設定したSubmitボタンを押して離した時動作します。

1. ボタンのタップやマウスクリックによる情報 : EventSystems.PointerEventData型

戻り値(返り値)

なし

○ 使い方
ボタンに対するイベントを独自に制御したい場合などに使用します。

//ボタンに対するイベントを独自制御するスクリプトを作成します。
using UnityEngine;
using UnityEngine.EventSystems; 
public class Test : MonoBehaviour, IPointerClickHandler
{
 public void OnSubmit( PointerEventData eventData )
 {
  Debug.Log( "決定ボタンを押した" );
 }
}

↑のようなスクリプトをButtonと同じゲームオブジェクトにアタッチし、ボタンを押すと、この関数の中に入ってきます。この時のボタンを押すの定義は押し込んで離した瞬間です。

関数などがよくわからない方は↓の記事を参考にしてみてください



タイトルとURLをコピーしました