facebook twitter hatena line email

「Unity/UIButton」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(Buttonにevent追加)
(クリックイベント処理を、ButtonClickedEventで分ける)
 
(同じ利用者による、間の29版が非表示)
行3: 行3:
 
#そのまま再生
 
#そのまま再生
  
==Buttonにevent追加==
+
==Buttonイベントは2種類方法がある==
 +
*GUI上からボタンイベントを設定するパターン
 +
*Scriptでボタンイベントを設定するパターン
 +
 
 +
==Buttonにevent追加(GUI上からボタンイベントを設定するパターン)==
 
#ButtonをCanvas上に設置
 
#ButtonをCanvas上に設置
 
#Canvas上のButtonを選択して左のinspectorタブを開く
 
#Canvas上のButtonを選択して左のinspectorタブを開く
行9: 行13:
 
#Runtime Onlyを選択
 
#Runtime Onlyを選択
 
#select objectにButtonを選択する
 
#select objectにButtonを選択する
#一番下のAddComponentを選択しScript名をUIControllerと入力しUIController.csを作成する
+
#一番下のAddComponentを選択しNewScriptを選択Script名をUIButtonScriptと入力しUIButtonScript.csを作成する(UIButtonScript.csはAssetsの直下に作成される)
#UIController.csに以下メソッドを追加
+
#UIButtonScript.csに以下メソッドを追加
  public void OnEventClick(string name)
+
  public void OnEventClick(string name) {
{
+
 
     Debug.Log(name+" hello");
 
     Debug.Log(name+" hello");
 
  }
 
  }
#no functionの場所にUIController.OnEventClickを入れる
+
#ButtonのInspectorのOnClickのno functionの場所にUIButtonScript.OnEventClickを入れる
#Button右のパラメータを入れる入力欄にメソッドに渡す文字列"hoge"を入れる
+
#ButtonのInspectorの新しく追加された入力欄にメソッドに渡す引数"hoge"を入れる
 
#そのまま再生
 
#そのまま再生
#consoleに"hoge hello"とでる
+
#Buttonをクリックするとconsoleに"hoge hello"とでる
 +
 
 +
==Buttonイベントを追加(Scriptでボタンイベントを設定するパターン)==
 +
public class UIButtonScript : MonoBehaviour {
 +
void Start () {
 +
GameObject.Find("Button").GetComponent<Button>().onClick.AddListener(OnClick);
 +
}
 +
  void OnClick() {
 +
Debug.Log("hello");
 +
}
 +
 
 +
==Buttonイベントを追加(一行パターン)==
 +
GameObject.Find("Button").GetComponent<Button>().onClick.AddListener(delegate {
 +
          Debug.Log("hello");
 +
});
 +
 
 +
==複数ボタンクリック==
 +
ローカル変数に一度に入れないと、最大値が、値として渡されるので、注意する。
 +
<pre>
 +
void Start()
 +
{
 +
    foreach (var num = 0; num < 3; num ++)
 +
    {
 +
        var id = i;
 +
        buttons[num].onClick.AddListener(() => OnClick(id));
 +
    }
 +
}
 +
void OnClick(int id)
 +
{
 +
    Debug.Log("id=" + id);
 +
}
 +
</pre>
 +
参考:http://kuromikangames.com/article/480275039.html
 +
 
 +
==a script called already exists at that pathエラーの場合==
 +
既に作成したスクリプトを選択する場合はAddComponentのあとNewScriptでなくScriptsから既存csを選択する
 +
 
 +
==ボタン無効化==
 +
GameObject button = GameObject.Find("/Canvas/Button");
 +
button.GetComponent<Button>().interactable = false;
 +
見た目も無効化のように、少し色が黒くなる。
 +
 
 +
==非永続化イベントの削除==
 +
button.onClick.RemoveAllListeners();
 +
永続化イベント(ビルド前に追加したもの)は、削除できないので、↓のように、無効に
 +
 
 +
==永続化イベントの無効化==
 +
button.onClick.SetPersistentListenerState(0, UnityEventCallState.Off);
 +
 
 +
==ボタンの色や透明度を変更==
 +
obj.GetComponent<Image>().color = new Color(1f, 0f, 0f, 1f); // 赤
 +
obj.GetComponent<Image>().color = new Color(1f, 1f, 1f, 0.5f); // 白の透明度50%
 +
 
 +
==ボタンが押せなくなったとき==
 +
#EventSystemがシーン上にあるか。
 +
#Canvasが2つあれば、1つを削除か、非アクティブにしてみる。
 +
 
 +
参考:https://ekulabo.com/check-ui
 +
 
 +
==クリックイベント処理を、ButtonClickedEventで分ける==
 +
<pre>
 +
using UnityEngine.UI;
 +
Button.ButtonClickedEvent hogeClickEvent = hogeButtonObj.GetComponent<Button>().onClick;
 +
hogeClickEvent.AddListener(OnClickHoge);
 +
</pre>
 +
 
 +
==onClick.AddListenerが動作しないとき==
 +
MonoBehaviourを継承する必要がないときで、継承してるときは、一旦、MonoBehaviourの継承を、消してみる。
 +
 
 +
==参考==
 +
http://unitygeek.hatenablog.com/entry/2015/03/07/145845

2023年2月23日 (木) 16:05時点における最新版

Button設置

  1. GameObject/UI/Buttonを選択すると"Button"がCanvas上に設置される
  2. そのまま再生

Buttonイベントは2種類方法がある

  • GUI上からボタンイベントを設定するパターン
  • Scriptでボタンイベントを設定するパターン

Buttonにevent追加(GUI上からボタンイベントを設定するパターン)

  1. ButtonをCanvas上に設置
  2. Canvas上のButtonを選択して左のinspectorタブを開く
  3. Button(Script)のところのOnClick()を確認
  4. Runtime Onlyを選択
  5. select objectにButtonを選択する
  6. 一番下のAddComponentを選択しNewScriptを選択Script名をUIButtonScriptと入力しUIButtonScript.csを作成する(UIButtonScript.csはAssetsの直下に作成される)
  7. UIButtonScript.csに以下メソッドを追加
public void OnEventClick(string name) {
    Debug.Log(name+" hello");
}
  1. ButtonのInspectorのOnClickのno functionの場所にUIButtonScript.OnEventClickを入れる
  2. ButtonのInspectorの新しく追加された入力欄にメソッドに渡す引数"hoge"を入れる
  3. そのまま再生
  4. Buttonをクリックするとconsoleに"hoge hello"とでる

Buttonイベントを追加(Scriptでボタンイベントを設定するパターン)

public class UIButtonScript : MonoBehaviour {
	void Start () {
		GameObject.Find("Button").GetComponent<Button>().onClick.AddListener(OnClick);
	}
 	void OnClick() {
		Debug.Log("hello");
	}

Buttonイベントを追加(一行パターン)

GameObject.Find("Button").GetComponent<Button>().onClick.AddListener(delegate {
          Debug.Log("hello");
});

複数ボタンクリック

ローカル変数に一度に入れないと、最大値が、値として渡されるので、注意する。

void Start()
{
    foreach (var num = 0; num < 3; num ++)
    {
        var id = i;
        buttons[num].onClick.AddListener(() => OnClick(id));
    }
}
void OnClick(int id)
{
    Debug.Log("id=" + id);
}

参考:http://kuromikangames.com/article/480275039.html

a script called already exists at that pathエラーの場合

既に作成したスクリプトを選択する場合はAddComponentのあとNewScriptでなくScriptsから既存csを選択する

ボタン無効化

GameObject button = GameObject.Find("/Canvas/Button");
button.GetComponent<Button>().interactable = false;

見た目も無効化のように、少し色が黒くなる。

非永続化イベントの削除

button.onClick.RemoveAllListeners();

永続化イベント(ビルド前に追加したもの)は、削除できないので、↓のように、無効に

永続化イベントの無効化

button.onClick.SetPersistentListenerState(0, UnityEventCallState.Off);

ボタンの色や透明度を変更

obj.GetComponent<Image>().color = new Color(1f, 0f, 0f, 1f); // 赤
obj.GetComponent<Image>().color = new Color(1f, 1f, 1f, 0.5f); // 白の透明度50%

ボタンが押せなくなったとき

  1. EventSystemがシーン上にあるか。
  2. Canvasが2つあれば、1つを削除か、非アクティブにしてみる。

参考:https://ekulabo.com/check-ui

クリックイベント処理を、ButtonClickedEventで分ける

using UnityEngine.UI;
Button.ButtonClickedEvent hogeClickEvent = hogeButtonObj.GetComponent<Button>().onClick;
hogeClickEvent.AddListener(OnClickHoge);

onClick.AddListenerが動作しないとき

MonoBehaviourを継承する必要がないときで、継承してるときは、一旦、MonoBehaviourの継承を、消してみる。

参考

http://unitygeek.hatenablog.com/entry/2015/03/07/145845