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

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

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

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

Unity

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

Q&A

解決済

1回答

3056閲覧

UnityのC#で変数に値が勝手に代入され続ける

potetiniku

総合スコア18

C#

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

Unity

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

0グッド

0クリップ

投稿2019/05/11 10:35

前提

Unity 2018.3.14f1で、obj1にアタッチされた「test1.cs」と、obj2にアタッチされた「Test2.cs」においての話です。

発生している問題

Playボタンを押して再生すると、最初はGetの値がずっと0のままなのですが、一度OnTriggerEnterの部分が実行されるとずっとGetに0と1が代入され続けてしまいます。

このGetへの連続した代入をなくし、Debug.Log("OnTriggerEnter通過");の部分が実行されたときにのみGetに1を代入するにはどうしたらよいでしょうか。
ご教示いただけますと幸いです。

該当のソースコード

以下、test1.csのソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class test1 : MonoBehaviour 6{ 7 CraneGameController2 t2; 8 9 public int Get; 10 11 void Start() 12 { 13 t2 = GameObject.Find("obj2").GetComponent<Test2>(); 14 } 15 16 void OnTriggerEnter(Collider other) 17 { 18 if (t2.step == 8) 19 { 20 Debug.Log("OnTriggerEnter通過"); 21 Get = 1; 22 } 23 } 24 25 void Update() 26 { 27 Debug.Log("変数Getには"+Get+"が格納されています"); 28 } 29}

以下、Test2.csのソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test2 : MonoBehaviour 6{ 7 public int step = 1; 8 9 void Update() 10 { 11 step = 8; 12 } 13}

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

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

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

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

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

YAmaGNZ

2019/05/11 10:48

ずっとGetに0と1が代入され続けるのですか? 「変数Getには1が格納されています」と表示され続けるのではなく 「変数Getには0が格納されています」と「変数Getには1が格納されています」が表示されるということですか?
potetiniku

2019/05/11 10:53

はい、そうです。 「変数Getには1が格納されています」と「変数Getには1が格納されています」が順番に表示され続けます。
YAmaGNZ

2019/05/11 11:13

0と1なのですか?1なのですか?誤字なのかどうかはっきりしてください。
potetiniku

2019/05/11 11:25

申し訳ございません。 0と1です。
guest

回答1

0

ベストアンサー

C#

1Debug.Log("変数Getには" + Get + "が格納されています :" + GetInstanceID());

として、「変数GetにはXが格納されています」の後ろの数字は0の場合と1の場合で同じ数字が出力されるか確認してください。

違う数字が表示される場合、test1のスクリプトが2つ生成されていることになります。
obj1が複数生成されていないか等を確認してください。

同じ数字が表示される場合、現状提示されている以外の部分でtest1のGetにアクセスしていることが考えられるのではないかと思います。

投稿2019/05/11 11:40

YAmaGNZ

総合スコア10242

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

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

potetiniku

2019/05/11 12:03

表示されたInstanceIDがそれぞれの場合で異なっていたので確認してみたところ、ほかのスクリプトからtest1を別のオブジェクトにアタッチしていました。 そして、その行を削除したところ、正常に動作するようになりました。 この問題を解決していただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問