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

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

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

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

Unity

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

Q&A

解決済

1回答

5189閲覧

【Unity】Toggle Groupで2つあるToggleのうち、一つを選択し、その値を受け取る方法

PotePui

総合スコア69

C#

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

Unity

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

0グッド

0クリップ

投稿2020/08/20 07:30

編集2020/08/23 12:12

前提・実現したいこと

前提として、
OculsでのVR開発をしております。
実現したいのは、Canvas内のToggle、AとBがあります。
Aを選択しているなら、Aを選択しているという値を受け取りたい
Bなら逆です。

発生している問題・エラーメッセージ

以下にコードを張り付けておきます

該当のソースコード

以下のManagerをGameManagerオブジェクトにアタッチし、各シリアライズのオブジェクトはそこでアタッチしています。

C#

1using System.Linq; 2using UnityEngine; 3using UnityEngine.SceneManagement; 4using UnityEngine.UI; 5 6public class TitleManager : MonoBehaviour 7{ 8 [SerializeField] private Animator m_HumanAnimator = null; 9 [SerializeField] private Animator m_CatAnimator = null; 10 [SerializeField] private Toggle m_ToggleAvater = null; 11 [SerializeField] private ToggleGroup m_ToggleAvaterGroup = null; 12 13 /* MainMenu */ 14 private void Start() 15 { 16 m_HumanAnimator = GetComponent<Animator>(); 17 m_CatAnimator = GetComponent<Animator>(); 18 m_ToggleAvater = GetComponent<Toggle>(); 19 m_ToggleAvaterGroup = GetComponent<ToggleGroup>(); 20 } 21 22 23 public void SelectPlayer() 24 { 25 if ( m_ToggleAvaterGroup.AnyTogglesOn() ) 26 { 27 //現在選択中のPlayerがどちらかを取得 28 m_ToggleAvater = m_ToggleAvaterGroup.ActiveToggles().FirstOrDefault(); 29 Debug.Log(m_ToggleAvater.name); 30 31 } 32 33 34 if ( m_ToggleAvater.name == "Human" ) 35 { 36 m_HumanAnimator.SetTrigger("Happy"); 37 GameDataManager.instance.playerTypeID = 0; 38 Invoke("NextScene", 2); 39 } 40 else if ( m_ToggleAvater.name == "Cat" ) 41 { 42 m_CatAnimator.SetTrigger("Happy"); 43 GameDataManager.instance.playerTypeID = 1; 44 Invoke("NextScene", 2); 45 } 46 } 47 48 void NextScene() 49 { 50 SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1); 51 } 52}

C#

1 //現在選択中のPlayerがどちらかを取得 2 m_ToggleAvater = m_ToggleAvaterGroup.ActiveToggles().FirstOrDefault(); 3 Debug.Log(m_ToggleAvater.name);

上記のm_ToggleAvater.nameに、どんな値が入っているのかデバックでは確認できずにいます。
結果、これは次のシーンへ遷移して、このシーンで設定したトグルなどの値を次のシーンへ引き継がせる流れになっています。

なっててほしいのですが、
実際にはこうはならず、トグルが機能していないため、SelectPlayer()の関数内が実行されていません。
尚、このスクリプトは、
UIにボタンがあり、そこのOnclick()によってSelectPlayer()を呼び出しています。

ちょっとOnclickの使い方も間違えているのかもしれないので、教えていただければ幸いです。

補足情報(FW/ツールのバージョンなど)

Unity 2019.4.3f1

以下に、上記トグルに関係ある設定とInspectorのスクリーンショットを以下に貼り付けます。
確定ボタンのInspector
空のオブジェクトTitleManagerにアタッチTestManager(黄色いマーカー部分)
Human(=A)のトグルボタン。トグルグループ2つのうち、Humanのみ、IsOnにチェックを入れている
以上で実行後のConsole。確定ボタンを2回押し、その2回ともNullReferenceExceptionが発生
NullReferenceExceptionの25行目

以上です。

C#

1m_ToggleAvaterGroup.AnyTogglesOn()

がNullなので、Trueの中の処理が呼ばれていないのかと思いますが、この処理をどう修正すればよいのでしょうか。
このスクリプトを参考にしたQiitaURLを載せます!

別の参項にしているサイト。結局、どちらのスクリプトでもトグルを選択し、OKボタンをしてもトグルにチェックが入っているほうのスクリプトは呼ばれません????

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

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

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

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

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

sakura_hana

2020/08/21 00:28

OnClick()が正常かどうか確認したいので、SelectPlayer()を呼び出そうとしているボタンのインスペクターのスクショを貼ってください。
PotePui

2020/08/23 11:51

すみません、バタバタしていて遅れました。 お返事ありがとうございます。 上記の補足情報に、トグルに関係あるオブジェクトのInspectorを貼り付けます。
guest

回答1

0

ベストアンサー

Startメソッド内の
m_ToggleAvaterGroup = GetComponent<ToggleGroup>();
が原因です。
インスペクタ上で設定しているにも関わらず、ここで「自分のGameObjectに付いたToggleGroup」を取得しようとして、存在していないのでnullになります。(Startは「動作(シーン)開始時」に実行されるので、インスペクタ上での設定が上書きされるような動きになります)
インスペクタ上から設定するならStartメソッドの中身は不要かと思います。

投稿2020/08/25 00:43

sakura_hana

総合スコア11425

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

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

PotePui

2020/08/27 05:11

ありがとうございます! 早速試してみたところ、ちゃんと動作するようになりました! 本当に助かりました???? ずっとここで悩んでいたので><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問