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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity

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

Q&A

解決済

1回答

2880閲覧

Unityでメニュー画面(UI)を起動した際に、ゲームを一時停止したい

YUTO_IT

総合スコア16

C#

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

Unity

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

0グッド

0クリップ

投稿2022/02/06 02:49

編集2022/02/08 12:54

お世話になっております。
Unity初心者のものです。

0. やりたいこと

ゲームでよくあるメニュー画面を開いているときはPlayerの行動のみを一時停止させるような機能を実装したいと考えております。
※メニュー画面と一部ボタン機能(メニュー画面を閉じる機能)は操作できる。

1. 仕組み

1.InputSystemであらかじめ設定したボタン(Tabキー)を押下すると、GameSystemクラスの「OnMenu関数」を呼び出す。
2.GameSystemクラスの「OnMenu関数」から、UIControllerクラスの「MenuUI_Open関数」
を呼び出し、一時停止させる。

 ※UIControllerクラスはメニュー画面のコンポーネントについている。
※GameSystemクラスは空のオブジェクトのコンポーネントについている。

イメージ説明

2. 困っていること

MenuUI_Open関数の「Time.timeScale」がプロジェクト全体を止めてしまっているようで、メニュー画面の操作も止めてしまう。

イメージ説明

ソースコート

■GameSystemクラス

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.InputSystem; 6 7public class GameSystem : MonoBehaviour 8{ 9 10 public UIController uiController; //UIControllerクラス 11 12 void OnMenu(InputValue inputValue) 13 { 14 uiController.MenuUI_Open() 15 } 16}

■UIControllerクラス

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine.EventSystems; 4using UnityEngine; 5using UnityEngine.UI; 6using UnityEngine.InputSystem; 7 8public class UIController : MonoBehaviour 9{ 10 11 public Button primarybutton; //最初に選択されるボタン 12 public GameObject MenuUI; //メニュー画面 13 14 public void MenuUI_Open()  //メニュー画面コントロール 15 { 16 MenuUI.SetActive(!MenuUI.activeSelf); 17 if (MenuUI.activeSelf == true) 18 { 19 Time.timeScale = 0; 20 primarybutton.Select(); 21 } 22 else 23 { 24 Time.timeScale = 1; 25 } 26 } 27} 28

 
情報不足でしたら申し訳ございません。
お手数をおかけしますが、正しい使い方をご教示いただけると幸いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/02/07 13:21

コードが小さくて文字が見えづらいので、teratailのコード提示方法でコードを提示していただけませんか? ```で囲う方法です。
YUTO_IT

2022/02/08 12:56

tkmnusr様 ご連絡ありがとうございます。 修正させていただきましたので、ご確認をお願い致します。
guest

回答1

0

ベストアンサー

1.InputSystemであらかじめ設定したボタン(Tabキー)を押下すると、
GameSystemクラスの「OnMenu関数」を呼び出す。

まず、質問欄にこちらの処理が書かれていなかったので、その辺りの再現はできなかったのですが、
この質問の肝は、以下だと思われるので、そちらに関して検証してみました。

MenuUI_Open関数の「Time.timeScale」がプロジェクト全体を止めてしまっているようで、
メニュー画面の操作も止めてしまう。

MenuUIも質問欄からは、型がGameObjectであること以外はわからなかったので(質問欄に記載がなかったので)、
とりあえず、MenuUIをボタン1つのUIと仮定して試してみました。

検証コードは以下です。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Sample : MonoBehaviour 6{ 7 public GameObject MenuUI; 8 bool stop = false; 9 10 // Start is called before the first frame update 11 void Start() 12 { 13 // 最初は非アクティブに 14 MenuUI.SetActive(false); 15 16 Invoke("MenuUI_Open", 2.0f); 17 } 18 19 // Update is called once per frame 20 void Update() 21 { 22 if (stop){ 23 Debug.Log("Update"); 24 } 25 } 26 27 void FixedUpdate(){ 28 if (stop){ 29 Debug.Log("FixedUpate"); 30 } 31 } 32 33 public void MenuUI_Open() 34 { 35 MenuUI.SetActive(!MenuUI.activeSelf); 36 if (MenuUI.activeSelf == true) 37 { 38 Debug.Log("MenuUI Open"); 39 Time.timeScale = 0; 40 stop = true; 41 // primarybutton.Select(); 42 } 43 else 44 { 45 Time.timeScale = 1; 46 } 47 } 48}

上記を試したところ、Time.timeScaleが0になった後でも、
表示されたUIにおいて、ボタンが押せるような挙動が確認できました。
最近、Unityを触っていなく、Unity 2021.2にバージョンアップしたら、
uGUIでなく、UI ToolkitがデフォルトのUIで使う仕様になっていたみたいで、
UI Toolkitでボタンイベント処理を走らせる方法がわからなかったので、
あくまでも挙動上だけで確かめたのですが、ボタンのクリックは反応しているように見えました。
また、上記で仕込んだテストコードにおいても、Updateのログは出力され続け、FixedUpateのログは一切出力されませんでした。
このログからもわかるように、
Time.timeScaleが0になったからと言って、何もかもが停止しているわけではないと思われます。
Updateが動いているので、イベントハンドラで動くUI処理も停止しているとは考えにくいです。
このことからも、UIが動かない原因は他にあるのではないでしょうか。
質問欄にインプットシステムの処理や、UIの構造等、情報が不足している為、現状では原因がわかりません。
また、最近導入されたUI Toolkitは私が不慣れであることや、私の環境では過去バージョンのUnityをインストールすることが
容量的に厳しいため、もし詳細な情報を追加いただいても、回答できるかはわからないことをご了承願います。

投稿2022/02/11 17:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問