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

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

新規登録して質問してみよう
ただいま回答率
85.46%
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

C#

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

Unity

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

Q&A

解決済

1回答

1232閲覧

Unity 他のスクリプトからの変数参照をすると0が戻り値となります・・・

noukanokurashi

総合スコア4

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

C#

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

Unity

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

0グッド

0クリップ

投稿2021/08/21 05:08

前提・実現したいこと

Unityでアラームアプリを作っています。ユーザがプルダウンで選択した時刻(Get_DropDown.csに格納されている)を現在時刻と比較するためのスクリプト(Compare_Time.cs)で参照できるように作成している最中です。現在、Get_DropDown.csにてプルダウンで取得したアラームの時間、分、秒をCompare_Time.csで参照する際に、時間、分、秒すべて0で受け取られていることになっていおり、先にすすめることができません。
全体図

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

選択したアラーム時刻
選択されたけど0になっている1
選択されたけど0になっている2
アラームセットを確定するボタンのインスペクター
Get_DropDownのインスペクター
ドロップダウン(Hour)のインスペクター

該当のソースコード

C#

1//Get_DropDown.cs 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6 7/// <summary> 8/// このスクリプトはドロップダウンリストから選ばれた時刻を取得し、 9/// DataTime型変数に格納しておく。 10/// </summary> 11 12public class Get_DropDown : MonoBehaviour 13{ 14 [HideInInspector] 15 public int Selected_Hour; 16 [HideInInspector] 17 public int Selected_Min; 18 [HideInInspector] 19 public int Selected_Sec; 20 21 public void OnValueChanged_1(int result) 22 { 23 Selected_Hour = result; 24 Debug.Log("Selected Hour " + Selected_Hour); 25 } 26 27 public void OnValueChanged_2(int result) 28 { 29 Selected_Min = result; 30 Debug.Log("Selected Min " + Selected_Min); 31 } 32 33 public void OnValueChanged_3(int result) 34 { 35 Selected_Sec = result; 36 Debug.Log("Selected Sec " + Selected_Sec); 37 } 38 39 // Start is called before the first frame update 40 void Start() 41 { 42 43 } 44 45 // Update is called once per frame 46 void Update() 47 { 48 49 50 } 51 52}

C#

1//Compare_Time.cs 2using System; 3using System.Collections; 4using System.Collections.Generic; 5using UnityEngine; 6using UnityEngine.UI; 7 8/// <summary> 9/// このスクリプトはDateTime型の現在時刻と、 10/// Get_DropDownにて取得した設定時刻を比較する。 11/// </summary> 12 13public class Compare_Time : MonoBehaviour 14{ 15 Get_DropDown tmp_alarm; 16 17 public GameObject B_AlarmSet; 18 19 [HideInInspector] 20 public int Alarm_Hour; 21 [HideInInspector] 22 public int Alarm_Min; 23 [HideInInspector] 24 public int Alarm_Sec; 25 26 private int setting = 0; 27 private int play = 0; 28 //時刻セットしたかどうか、指定時刻になったかどうか判断(0・false 1・true) 29 30 public Text AramText; 31 32 public string alarm;//アラーム時刻を合体させる 33 DateTime datetime_now;//現在の時刻 34 DateTime datetime_alarm;//アラームの時刻S 35 36 //public void AlarmDisplay_Form_Load() 37 //{ 38 // //アラームラベルの初期表示 39 // AramText.text = "Please decide the specified time "; 40 //} 41 42 public void AlarmSet_Button_Click() 43 { 44 //ドロップダウンからの値をGet_DropDown.csから取得 45 **tmp_alarm = GameObject.Find("C_Get_DropDown").GetComponent<Get_DropDown>();** 46 47 //アラーム時刻を時間・分・秒にわけて受け取る 48 Alarm_Hour = tmp_alarm.Selected_Hour; 49 Alarm_Min = tmp_alarm.Selected_Min; 50 Alarm_Sec = tmp_alarm.Selected_Sec; 51 52 //指定時間と分をあわせて日付データに変換できる形にする 53 alarm = Alarm_Hour + ":" + Alarm_Min + ":" + Alarm_Sec; 54 55 //日付データに変換 56 datetime_alarm = DateTime.Parse(alarm); 57 58 59 Debug.Log("Alarm_Hour " + tmp_alarm.Selected_Hour); 60 Debug.Log("Alarm_Min " + tmp_alarm.Selected_Min); 61 Debug.Log("Alarm_Sec " + tmp_alarm.Selected_Sec); 62 63 //AramText.textの表示変化 64 B_AlarmSet.GetComponentInChildren<Text>().text = Alarm_Hour + ":" + Alarm_Min + ":" + Alarm_Sec; 65 //AramText.text = Alarm_Hour + ":" + Alarm_Min + ":" + Alarm_Sec; 66 67 68 //セットされたをtrueに、プレイされたをfalseにもどす。 69 setting = 1; 70 play = 0; 71 } 72 73 74 75 // Start is called before the first frame update 76 void Start() 77 { 78 } 79 80 // Update is called once per frame 81 void Update() 82 { 83 // 現在時刻を取得 84 datetime_now = DateTime.Now; 85 }

試したこと

どうやらGet_DropDownゲームオブジェクトのインスペクターに写っていた変数が0にセットされていたので、プログラムコードのように[HideInInspector]をつけてコード内の値を優先し、インスペクターからは非表示にしてみましたが、状況が変わらず、0のままになってしまいます。

参照先

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

Unity 2020.3.8f1 Personal

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

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

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

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

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

guest

回答1

0

ベストアンサー

画像を見る限り、Get_DropDownがC_Get_DropDownにもD_hourにもアタッチされていますが、そうした場合この2つのGet_DropDownは別々のものです。
そのため、D_hour側のGet_DropDownをいくら変更しようとも、C_Get_DropDown側のGet_DropDownには反映されません。
この場合、D_hour側のGet_DropDownは削除し、C_Get_DropDown側のGet_DropDownの関数をD_hourのDropDownに設定する必要があります。

[HideInInspector]をつけてコード内の値を優先し、

これは単に「インスペクターに表示されなくなる」だけです。
優先するという概念はありません。

投稿2021/08/21 05:22

編集2021/08/21 05:24
fiveHundred

総合スコア9917

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

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

noukanokurashi

2021/08/21 05:43

ご回答ありがとうございます。 ご指摘の通り、D_Hour、D_Min、D_SecからGet_DropDown.csのアタッチを削除し、C_Get_DropDownのゲームオブジェクトを「値の変化時」の箇所にドラッグし、値を取得する関数を割り当てたところ無事にCompare_Time.csで参照できました。 本当にありがとうございます。
noukanokurashi

2021/08/21 05:45

ちなみに、[HideInInspector]はなくても動作に影響はなかったということでしょうか。
fiveHundred

2021/08/21 05:49

影響はありません。 「インスペクターから値を変更されるとまずい」というときに使いますが、その場合でも大体の場合はプロパティで十分です。
noukanokurashi

2021/08/22 00:51

ご回答ありがとうございます。 承知いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問