質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • C#

    7710questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4426questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

ゲーム選択肢を方向キーでカーソルで合わせたいのですが…。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 650
退会済みユーザー

退会済みユーザー

ノベルゲームの選択肢を方向キーを押してボタン選択が変わるというプログラムを付け加えたいのですが、初心者でうまくいきません。助言いただけたら有り難いです。

選択肢のプログラムです↓

using UnityEngine.UI;
using Utage;
using System.Collections.Generic;

namespace Utage
{

    /// <summary>
    /// 選択肢表示のサンプル
    /// </summary>
    [AddComponentMenu("Utage/ADV/UiSelectionManager")]
    public class AdvUguiSelectionManager : MonoBehaviour
    {
        /// <summary>ADVエンジン</summary>
        public AdvEngine Engine { get { return this.engine ?? (this.engine = GetComponent<AdvEngine>()); } }
        [SerializeField]
        AdvEngine engine;

        /// <summary>選択済みのテキスト色</summary>
        /// <summary>選択済みのテキスト色を変えるか</summary>
        enum SelectedColorMode
        {
            None,        //選択済みでも変えない
            Change,        //選択済みで色を変える
        }
        [SerializeField]
        SelectedColorMode selectedColorMode = SelectedColorMode.None;

        /// <summary>選択済みのテキスト色</summary>
        [SerializeField]
        Color selectedColor = new Color(0.8f,0.8f,0.8f);


        //表示する選択肢プレハブのリスト
        List<GameObject> PrefabList { get { return prefabList; } }
        [SerializeField]
        List<GameObject> prefabList;

        AdvSelectionManager SelectionManager { get { return engine.SelectionManager; } }

        /// <summary>選択肢のリストビュー</summary>
        public UguiListView ListView
        {
            get { return listView ?? (listView = GetComponent<UguiListView>()); }
        }
        UguiListView listView;


        CanvasGroup CanvasGroup
        {
            get
            {
                return canvasGroup ?? (canvasGroup = UtageToolKit.GetComponentCreateIfMissing<CanvasGroup>(this.gameObject));
            }
        }
        CanvasGroup canvasGroup;

        public List<GameObject> Items { get { return items; } }
        List<GameObject> items = new List<GameObject>();

        /// <summary>開く</summary>
        public void Open()
        {
            this.gameObject.SetActive(true);
        }

        /// <summary>閉じる</summary>
        public void Close()
        {
            this.gameObject.SetActive(false);
        }

        void Awake()
        {
            SelectionManager.OnClear.AddListener(OnClear);
            SelectionManager.OnBeginShow.AddListener(OnBeginShow);
            SelectionManager.OnBeginWaitInput.AddListener(OnBeginWaitInput);
            ClearAll();
        }

        //全てクリア
        void ClearAll()
        {
            ListView.ClearItems();
            foreach (var item in Items)
            {
                UtageToolKit.SafeDestroy(item);
            }
            Items.Clear();
        }

        //選択肢を作成
        void CreateItems()
        {
            ClearAll();

            List<GameObject> listViewItems = new List<GameObject>();
            foreach( var data in SelectionManager.Selections )
            {
                GameObject go = GameObject.Instantiate(GetPrefab(data)) as GameObject;
                AdvUguiSelection selection = go.GetComponentInChildren<AdvUguiSelection>();
                if(selection) selection.Init(data, OnTap);

                switch (selectedColorMode)
                {
                    case SelectedColorMode.Change:
                        if (Engine.SystemSaveData.SelectionData.Check(data))
                        {
                            go.SendMessage("OnInitSelected", selectedColor);
                        }
                        break;
                    case SelectedColorMode.None:
                    default:
                        break;
                }


                Items.Add(go);
                //X,Y座標の指定がないならリストビューに追加
                if (data.X == null || data.Y == null)
                {
                    listViewItems.Add(go);
                }
                else
                {
                    UtageToolKit.AddChild(this.transform, go, new Vector3(data.X.Value, data.Y.Value, 0));
                }
            }
            ListView.AddItems(listViewItems);
            ListView.Reposition();
        }

        //選択肢表示に使うプレハブを取得
        GameObject GetPrefab( AdvSelection selectionData )
        {
            GameObject prefab = null;
            if (!string.IsNullOrEmpty(selectionData.PrefabName))
            {
                //プレハブ名と一致するものを探す
                prefab = PrefabList.Find(x => x.name == selectionData.PrefabName);
                if (prefab != null)
                {
                    return prefab;
                }
                else
                {
                    //見つからないとき
                    Debug.LogError("Not found Selection Prefab : " + selectionData.PrefabName);
                }
            }

            //プレハブ名の指定がなかったら、リストの一番目を
            //旧バージョンとの互換性のためListViewから選ぶ
            prefab = PrefabList.Count > 0 ? PrefabList[0] : ListView.ItemPrefab;
            return prefab;
        }

        //リストビューのアイテムが作成されるときに呼ばれるコールバック
        void CallbackCreateItem(GameObject go, int index)
        {
            AdvSelection data = SelectionManager.Selections[index];
            AdvUguiSelection selection = go.GetComponentInChildren<AdvUguiSelection>();
            selection.Init(data, OnTap);
        }

        //選択肢が押された
        void OnTap(AdvUguiSelection item)
        {
            SelectionManager.Select(item.Data );
            ClearAll();
        }


        //クリア
        public void OnClear(AdvSelectionManager manager)
        {
            ClearAll();
        }

        //表示開始
        public void OnBeginShow( AdvSelectionManager manager )
        {
            CreateItems();
            CanvasGroup.interactable = false;
        }

        //入力待ち開始
        public void OnBeginWaitInput(AdvSelectionManager manager)
        {
            CanvasGroup.interactable = true;
        }
    }
}

方向キーを押すというのは

    if (Input.GetKeyDown("up")) { 
        transform.position = SelectionManager.transform.position; 
    }

    if (Input.GetKeyDown("down")) {
        transform.position = SelectionManager.transform.position; 
    } 
}


こんな感じで加えたのですが、何も起動せず。形としてはあっていますか?
プレハブで作られてた選択肢のコードがわからないのですが、
どういう風に書けばいいでしょうか…。
宜しくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

同じタグがついた質問を見る

  • C#

    7710questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4426questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。