🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1629閲覧

Unity RPG スクロール画面をスクロールできるようにしたい。

HoneMetal

総合スコア1

RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/02/16 05:15

編集2021/02/16 05:18

UnityでアクションRPGを作ろうとしているのですが。
https://gametukurikata.com/unitychanrpg/unitychanrpg12
上記のサイトの通りに記述しましたが。
アイテム欄をゲームパッドや矢印キーで一番下より下を選択したとき自動でスクロールする所でスクロールしませんでした。
関係ありそうなスクリプト、メソッドを下に書きます。(文字数制限のため一部省略しています)

c#

1using System.Collections; 2using System.Collections.Generic; 3using System.Text; 4using UnityEngine; 5using UnityEngine.EventSystems; 6using UnityEngine.UI; 7 8public class CommandScript : MonoBehaviour 9{ 10 ... 11 void Awake() 12 { 13     ... 14 itemPanel = transform.Find("ItemPanel").gameObject; 15 content = itemPanel.transform.Find("Mask/Content").gameObject; 16 useItemPanel = transform.Find("UseItemPanel").gameObject; 17 useItemSelectCharacterPanel = transform.Find("UseItemSelectCharacterPanel").gameObject; 18 itemInfomationPanel = transform.Find("ItemInformationPanel").gameObject; 19 useItemInfomationPanel = transform.Find("UseItemInfomationPanel").gameObject; 20 21 itemPanelCanvasGroup = itemPanel.GetComponent<CanvasGroup>(); 22 useItemPanelCanvasGroup = useItemPanel.GetComponent<CanvasGroup>(); 23 useItemSelectCharacterPanelCanvasGroup = useItemSelectCharacterPanel.GetComponent<CanvasGroup>(); 24 25 infomationTitleText = itemInfomationPanel.transform.Find("Title").GetComponent<Text>(); 26 infomationText = itemInfomationPanel.transform.Find("Infomation").GetComponent<Text>(); 27 28 scrollManager = content.GetComponent<ScrollManager>(); 29 30 //Debug.Log(scrollManager); 31 } 32 ... 33 private void Update() 34 { 35 ... 36 if (EventSystem.current.currentSelectedGameObject == null) 37 { 38 if (currentCommand == CommandMode.CommandPanel) 39 { 40 EventSystem.current.SetSelectedGameObject(commandPanel.transform.GetChild(0).gameObject); 41 } 42 else if (currentCommand == CommandMode.ItemPanel) 43 { 44 EventSystem.current.SetSelectedGameObject(content.transform.GetChild(0).gameObject); 45 scrollManager.Reset(); 46 } 47 else if (currentCommand == CommandMode.ItemPanelSelectCharacter) 48 { 49 EventSystem.current.SetSelectedGameObject(selectCharacterPanel.transform.GetChild(0).gameObject); 50 } 51 else if (currentCommand == CommandMode.StatusPanel) 52 { 53 EventSystem.current.SetSelectedGameObject(selectCharacterPanel.transform.GetChild(0).gameObject); 54 } 55 else if (currentCommand == CommandMode.StatusPanelSelectCharacter) 56 { 57 EventSystem.current.SetSelectedGameObject(selectCharacterPanel.transform.GetChild(0).gameObject); 58 } 59 else if (currentCommand == CommandMode.UseItemPanel) 60 { 61 EventSystem.current.SetSelectedGameObject(useItemPanel.transform.GetChild(0).gameObject); 62 } 63 else if (currentCommand == CommandMode.UseItemSelectCharacterPanel) 64 { 65 EventSystem.current.SetSelectedGameObject(useItemSelectCharacterPanel.transform.GetChild(0).gameObject); 66 } 67 } 68 } 69 public void CreateItemPanelButton(AllyStatus allyStatus) 70 { 71 itemInfomationPanel.SetActive(true); 72 selectCharacterPanelCanvasGroup.interactable = false; 73 74 // アイテム一覧のスクロール値の初期化 75 scrollManager.Reset(); 76 77 // アイテムパネルボタンを何個作成したかどうか 78 int itemPanelButtonNum = 0; 79 GameObject itemButtonIns; 80 81 foreach (var item in allyStatus.GetItemDirectionary().Keys) 82 { 83 itemButtonIns = Instantiate<GameObject>(itemPanelButtonPrefab, content.transform); 84 itemButtonIns.transform.Find("ItemName").GetComponent<Text>().text = item.GetKanjiName(); 85 itemButtonIns.GetComponent<Button>().onClick.AddListener(() => SelectItem(allyStatus, item)); 86 itemButtonIns.GetComponent<ItemPanelButtonScript>().SetParam(item); 87 88 // 指定した番号のアイテムパネルボタンにアイテムスクロール用スクリプトを取り付ける 89 if (itemPanelButtonNum != 0 90 && (itemPanelButtonNum % scrollDownButtonNum == 0 91 || itemPanelButtonNum % (scrollDownButtonNum + 1) == 0) 92 ) 93 { 94 itemButtonIns.AddComponent<ScrollDownScript>(); 95 } 96 else if (itemPanelButtonNum != 0 97 && (itemPanelButtonNum % scrollUpButtonNum == 0 98 || itemPanelButtonNum % (scrollUpButtonNum + 1) == 0) 99 ) 100 { 101 // アイテムスクロールスクリプトの取り付けて設定値のセット 102 itemButtonIns.AddComponent<ScrollUpScript>(); 103 } 104 105 ... 106 // アイテムパネルボタン番号を更新 107 itemPanelButtonNum++; 108 109 if (itemPanelButtonNum == scrollUpButtonNum + 2) 110 { 111 Debug.Log(itemPanelButtonNum); 112 itemPanelButtonNum = 2; 113 } 114 } 115 ... 116 } 117 118 119 120}

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class ScrollManager : MonoBehaviour 7{ 8 // アイテムボタン表示用コンテンツ 9 private Transform content; 10 // スクロール中かどうか 11 private bool changeScrollValue; 12 // スクロールの目的の値 13 private float destinationValue; 14 // スクロールスピード 15 [SerializeField] 16 private float scrollSpeed = 1000f; 17 // 一回でスクロールする値 18 [SerializeField] 19 private float scrollValue = 415f; 20 // アイテム一覧のスクロールのデフォルト値 21 private Vector3 defaultScrollValue; 22 23 // 前に選択していたボタン 24 public static GameObject PreSelectedButton { get; set; } 25 26 void Awake() 27 { 28 content = transform; 29 defaultScrollValue = content.transform.position; 30 } 31 32 void Update() 33 { 34 35 if (!changeScrollValue) 36 { 37 return; 38 } 39 40 // 徐々に目的の値に変化させる 41 content.transform.localPosition = new Vector3(content.transform.localPosition.x, Mathf.MoveTowards(content.transform.localPosition.y, destinationValue, scrollSpeed * Time.deltaTime), content.transform.localPosition.z); 42 43 // ある程度移動したら目的地に設定 44 if (Mathf.Abs(content.transform.localPosition.y - destinationValue) < 0.2f) 45 { 46 changeScrollValue = false; 47 content.transform.localPosition = new Vector3(0f, destinationValue, 0f); 48 } 49 } 50 51 // 下にスクロール 52 public void ScrollDown(Transform button) 53 { 54 55 if (changeScrollValue) 56 { 57 Debug.Log("下へ"); 58 changeScrollValue = false; 59 content.transform.localPosition = new Vector3(content.transform.localPosition.x, destinationValue, content.transform.localPosition.z); 60 } 61 62 if (ScrollManager.PreSelectedButton != null 63 && button.position.y > ScrollManager.PreSelectedButton.transform.position.y) 64 { 65 Debug.Log("OK"); 66 destinationValue = content.transform.localPosition.y - scrollValue; 67 changeScrollValue = true; 68 } 69 70 } 71 // 上にスクロール 72 public void ScrollUp(Transform button) 73 { 74 if (changeScrollValue) 75 { 76 // Debug.Log("動く"); 77 content.transform.localPosition = new Vector3(content.transform.localPosition.x, destinationValue, content.transform.localPosition.z); 78 changeScrollValue = false; 79 } 80 81 if (ScrollManager.PreSelectedButton != null 82 && button.position.y < ScrollManager.PreSelectedButton.transform.position.y) 83 { 84 // Debug.Log("OK"); 85 destinationValue = content.transform.localPosition.y + scrollValue; 86 changeScrollValue = true; 87 } 88 } 89 90 public void Reset() 91 { 92 PreSelectedButton = null; 93 transform.position = defaultScrollValue; 94 } 95} 96

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5using UnityEngine.UI; 6 7public class ScrollUpScript : MonoBehaviour, ISelectHandler, IDeselectHandler 8{ 9 10 private ScrollManager scrollManager; 11 12 void Start() 13 { 14 scrollManager = GetComponentInParent<ScrollManager>(); 15 } 16 17 // ボタンが選択された時に実行 18 public void OnSelect(BaseEventData eventData) 19 { 20 //scrollManager = GetComponentInParent<ScrollManager>(); 21 scrollManager.ScrollUp(transform); 22 23 ScrollManager.PreSelectedButton = gameObject; 24 } 25 // ボタンが選択解除された時に実行 26 public void OnDeselect(BaseEventData eventData) 27 { 28 29 } 30}

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5using UnityEngine.UI; 6 7public class ScrollDownScript : MonoBehaviour, ISelectHandler, IDeselectHandler 8{ 9 10 private ScrollManager scrollManager; 11 12 void Start() 13 { 14 scrollManager = GetComponentInParent<ScrollManager>(); 15 } 16 17 // ボタンが選択された時に実行 18 public void OnSelect(BaseEventData eventData) 19 { 20 //scrollManager = GetComponentInParent<ScrollManager>(); 21 scrollManager.ScrollDown(transform); 22 23 ScrollManager.PreSelectedButton = gameObject; 24 } 25 // ボタンが選択解除された時に実行 26 public void OnDeselect(BaseEventData eventData) 27 { 28 29 } 30}

画像も載せます。
CommandScriptを張り付けてるゲームオブジェクトのinspector
ScrollUp,DownScriptを張り付けてるゲームオブジェクトのinspector
ScrollManagerを張り付けてるゲームオブジェクトのinspector

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cleaner

2021/02/16 06:51

デバッグという便利な機能が備わっているのでそれで原因を探ってみて下さい。 もし記事の丸写しであれは、おそらくしてるとは思いますが手打ちではなくコピペしてください。 それでもダメなら記事の作成者にコードが正しくないことを連絡してみてはどうでしょうか? もし、それでもだめならもっと小さい要素で自分でロジックを考えてやってみてはどうでしょうか? その上で新たな疑問があれば質問を編集してください。
guest

回答1

0

自己解決

イメージ説明
イメージ説明
青く囲っている
「スクリプトのCommandScript内から該当するボタンに取り付けます」という文面に対して、ItemPanelButton(プレハブ)のInspecterに取り付けるモノと勘違いしていました。
Inspecter内のScrollUp,DownScriptを削除したら正常に動作しました。
お騒がせしてすみませんm(_ _)m

投稿2021/02/17 05:08

HoneMetal

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問