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

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

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

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

Q&A

解決済

2回答

6054閲覧

UnityでのC#プログラムで、フラグの参照がうまくいきません

cccd1307

総合スコア7

Unity

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

0グッド

0クリップ

投稿2016/09/15 04:54

###前提・実現したいこと
フラグ(Door_flag)がtrueの時にCキーが押されたら
何かを実行したい

フラグはUnity上で、物体が重なったときにtrueになり
離れたらfalseになるように指定してあります。

###発生している問題・エラーメッセージ
フラグがtrueにならないようです。
イベント自体はおこっていて、その時のデバッグログは
ちゃんと表示されてるので、その瞬間はフラグもtrueに
なっていると思うのですが、それが保存されずに、
すぐにfalseにもどっているのか、Cキーを押したときには
条件が整わず、本来の処理が実行されません。

スコープの問題でしょうか・・・

エラーはでてません。常にフラグを表示すろt falseしかかえってこないのが問題です

###該当のソースコード
using UnityEngine;
using System.Collections;

public class Door_colider_flag : MonoBehaviour {
public bool Door_flag;

void Update () { if ((Door_flag) && (Input.GetKey("c"))){ Debug.Log("C キーが押された!!"); //本来の処理 } } // 衝突した瞬間に呼ばれる void OnTriggerEnter(Collider other) { Door_flag = true; Debug.Log("HIT!!"); } // 衝突から離れた瞬間に呼ばれる void OnTriggerExit(Collider other) { Door_flag = false; Debug.Log("NO HIT!!"); }

}

###試したこと Door_flagの値をつねに表示したところ、trueになってない ということがわかりました。 イベントでうけとったOnTriggerEnterでの変数の 代入がうまくいっていないのか、Update処理でのDoor_flag の値がうけとれていないのか。。 ###補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報

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

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

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

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

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

guest

回答2

0

自己解決

すみません私のミスでした
途中から衝突検知オブジェクトを親から子へと移したのですが、
親と子と2重に衝突検知を仕掛けていたようで
(子オブジェクトのスクリプトはチェックで外していたのですが機能していたようで)

実際の衝突検知は子オブジェクトで発生して、フラグも子の変数が変更されていたが、
updateの方は親のスクリプトが表示しようとして、子のフラグは知らないので
Falseのままだった・・・ようです。(半分憶測ですが)

子オブジェクトに衝突検知したら、親オブジェクトに通知するスクリプトをかいて
親の方でフラグを書き換えたら、ちゃんと動作しました。

ご回答をいただいた方には申し訳ありませんでした。ありがとうございました。

投稿2016/09/16 02:43

cccd1307

総合スコア7

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

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

0

まずはそもそも衝突の検出が上手くいっているのかを確認した方がいいと思われます。
具体的にはコンソールに"HIT!!"がちゃんと表示されているかどうか。
また、ちゃんと衝突しているが、直ぐに離れてしまっている可能性もありますので、
"HIT!!"の直後に"NO HIT!!"が書かれてないかもチェックしましょう。

投稿2016/09/15 05:47

ishi9

総合スコア1294

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

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

cccd1307

2016/09/15 08:25

ご回答ありがとうございます。\n\n衝突は問題なくおきています。\n重なった時にはHITが表示され、離れた時にはNO HITが表示されます\n\nイベントハンドラ内で、コンソールに直接Door_flagの値を表示させましたが、\nその時は、重なった時にはtrue、離れた時にはfalseが表示されました。\n\n重なり方は、瞬間ではなくて、アバターが玄関スペース(キューブ)内\nに入ったらというものなので、すぐに離れるといった不安定なものでは\nありません、表示がちらつくということもないので、その時はフラグには\n値ははいっていると思います。\n\nただ、Update()内でDoor_flagの値を表示すると、falseのままで、trueに\nなることはないのです。それで疑問なのです
ishi9

2016/09/15 08:53 編集

そうですか・・・ 提示されているコードには問題がないように思えますが、 一応、「bool Door_flag」で全検索をかけたらどうなりますかね?(他にDoor_flagを宣言している箇所を探す) もし、それで関数内で宣言しているDoor_flagがあった場合、その辺りが怪しいかもしれません。
cccd1307

2016/09/15 09:02

検索をかけても他の箇所に出てきたり、綴りが間違っているということもないですね。 ここに載せているのが全文で、抜粋ではないのです。 そうですか、文法的には問題はないのですか・・・ では、プログラム的な問題ではなくて、Unityの作り方や 別のオブジェクトが干渉しているといった問題なのかもしれませんね アバターが近づいたら、ドアが開くというのを作っているのですが アニメーションがうまく動かず手直しをしてる間に、プログラムの方 までおかしくなってきてしまったので、オブジェクトの方から、単純に して、試してみます。 どうも、ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問