「Unity/UIButton」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→クリックイベント処理を、ButtonClickedEventで分ける) |
|||
| (同じ利用者による、間の26版が非表示) | |||
| 行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を選択しNewScriptを選択Script名をUIButtonScriptと入力しUIButtonScript.csを作成する(UIButtonScript.csはAssetsの直下に作成される) |
| − | # | + | #UIButtonScript.csに以下メソッドを追加 |
| − | public void OnEventClick(string name) | + | public void OnEventClick(string name) { |
| − | + | ||
Debug.Log(name+" hello"); | Debug.Log(name+" hello"); | ||
} | } | ||
| − | # | + | #ButtonのInspectorのOnClickのno functionの場所にUIButtonScript.OnEventClickを入れる |
| − | # | + | #ButtonのInspectorの新しく追加された入力欄にメソッドに渡す引数"hoge"を入れる |
#そのまま再生 | #そのまま再生 | ||
#Buttonをクリックすると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 | http://unitygeek.hatenablog.com/entry/2015/03/07/145845 | ||
2023年2月23日 (木) 16:05時点における最新版
目次
- 1 Button設置
- 2 Buttonイベントは2種類方法がある
- 3 Buttonにevent追加(GUI上からボタンイベントを設定するパターン)
- 4 Buttonイベントを追加(Scriptでボタンイベントを設定するパターン)
- 5 Buttonイベントを追加(一行パターン)
- 6 複数ボタンクリック
- 7 a script called already exists at that pathエラーの場合
- 8 ボタン無効化
- 9 非永続化イベントの削除
- 10 永続化イベントの無効化
- 11 ボタンの色や透明度を変更
- 12 ボタンが押せなくなったとき
- 13 クリックイベント処理を、ButtonClickedEventで分ける
- 14 onClick.AddListenerが動作しないとき
- 15 参考
Button設置
- GameObject/UI/Buttonを選択すると"Button"がCanvas上に設置される
- そのまま再生
Buttonイベントは2種類方法がある
- GUI上からボタンイベントを設定するパターン
- Scriptでボタンイベントを設定するパターン
Buttonにevent追加(GUI上からボタンイベントを設定するパターン)
- ButtonをCanvas上に設置
- Canvas上のButtonを選択して左のinspectorタブを開く
- Button(Script)のところのOnClick()を確認
- Runtime Onlyを選択
- select objectにButtonを選択する
- 一番下のAddComponentを選択しNewScriptを選択Script名をUIButtonScriptと入力しUIButtonScript.csを作成する(UIButtonScript.csはAssetsの直下に作成される)
- UIButtonScript.csに以下メソッドを追加
public void OnEventClick(string name) {
Debug.Log(name+" hello");
}
- ButtonのInspectorのOnClickのno functionの場所にUIButtonScript.OnEventClickを入れる
- ButtonのInspectorの新しく追加された入力欄にメソッドに渡す引数"hoge"を入れる
- そのまま再生
- 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%
ボタンが押せなくなったとき
- EventSystemがシーン上にあるか。
- 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の継承を、消してみる。
