Unity スティック入力で選択できる選択肢を実装する
Xboxコントローラで遊ぶゲームを作ると、タイトル画面でボタンを選択したいですよね。
簡単にそれを実装する方法(著者がよくやる手法)を紹介します。
Unity Ver.2019.2.21f1
↓今回やること↓
スティック入力で選択できる選択肢の実装。
— わかです (@wakaGameStudio) 2020年8月14日
めちゃ簡単。 pic.twitter.com/T8mCx3GvEg
①UIを作成
- うまく作れば縦横組み合わせて作れるのですが、今回は縦方向のみです。
②Project欄にコンテンツを作成
- imgSelAC:作成したImageすべてにアタッチするAnimatorController
- Select:選択中に再生するAnimator
- Standby:待機中(非選択時)に再生するAnimator
- SelManagerScript:スティック入力や選択後の遷移を管理するスクリプト
③Animatorの設定
- 今回は、選択時は赤色、非選択時は白にしています。
- Inspector欄でLoop Timeにチェックを入れておきましょう。
④AnimatorControllerの設定
- ParameterにBoolを追加。
- 追加したBoolがtrueなら選択中、falseなら非選択になるように設定。
- HasExitTimeのチェックを外す。
⑤Scriptの中身を書く
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SelManagerScript : MonoBehaviour { //イメージにアタッチしたアニメーターコントローラ [SerializeField] private Animator[] animator; //連続入力回避用フラグ private bool isSel; //選択中番号 private int selCnt; private void Start() { //変数初期化 selCnt = 0; animator[selCnt].SetBool("isSel", true); } private void Update() { //スティックの入力値を格納 float input = Input.GetAxis("Vertical"); //スティックの入力チェック if (input <= -0.5f && !isSel) { isSel = true; animator[selCnt].SetBool("isSel", false); ++selCnt; if (selCnt >= animator.Length) { selCnt = 0; } animator[selCnt].SetBool("isSel", true); } if (input >= 0.5f && !isSel) { isSel = true; animator[selCnt].SetBool("isSel", false); --selCnt; if (selCnt < 0) { selCnt = animator.Length - 1; } animator[selCnt].SetBool("isSel", true); } //長押し回避 if (input >= -0.1f && input <= 0.1f) { isSel = false; } //決定 if (Input.GetKeyDown(KeyCode.Return)) { switch (selCnt) { case 0: print("0を選択"); break; case 1: print("1を選択"); break; case 2: print("2を選択"); break; default: break; } } } }
忘れずにSerializeFieldで出した分をDandDで設定しておきます。
Console欄にご注目。。。
スティック入力で選択できる選択肢の実装。
— わかです (@wakaGameStudio) 2020年8月14日
めちゃ簡単。 pic.twitter.com/T8mCx3GvEg