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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

2回答

1569閲覧

オブジェクトに触れた時にメッセージを表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2021/11/13 04:14

編集2021/11/14 05:21

unityで障害物を調べて、それについての情報をメッセージで表示するようにしたいです。
メッセージは、こちらのサイトを参考にしました。キー操作は、マウスクリックからZキーに変更しています。
参考にしたサイト
とりあえずスクリプトを書いてみたのですが、一度障害物を調べた状態で、何もないところでzキーを押すと、
前回調べた障害物のメッセージが出てきます。また、(同じような問題だとは思うのですが)一度障害物を調べてから、
別の障害物を調べると、前回調べた障害物のメッセージが出てきます・・・。
やり方は、zキーが押された時にis triggerのボックスコライダーをオンにして、

会話中であることを示すflag変数をtrueにし、

is triggerにしたボックスコライダーに障害物が触れたときに、

タグで判定して、その判定結果を元にメッセージを表示するように関数を呼び出してそのあと、

flag変数をfalseにして、

コライダーをオフにしています。

ですが、思い通りに動いてくれません!
どう直せばいいですか?よろしくお願いします!

子ライダーの画像です。
コンポーネント

子ライダーです。

スクリプト

using

1using System.Collections.Generic; 2using UnityEngine; 3 4public class NewBehaviourScript : MonoBehaviour 5{ 6 const float value = 0.1f; 7 bool moving = true; 8 public float speed = 6.0F; //歩行速度 9 public float jumpSpeed = 8.0F; //ジャンプ力 10 public float gravity = 20.0F; //重力の大きさ 11 public float rotateSpeed = 3.0F; //回転速度 12 private float mX, mY; 13 private CharacterController controller; 14 private Vector3 moveDirection = Vector3.zero; 15 private float h,v; 16 Animator animator; 17 public AudioClip footsteps; 18 protected AudioSource audioSource; 19 [SerializeField] AudioClip[] clips; 20 [SerializeField] bool randomizePitch = true; 21 [SerializeField] float pitchRange = 0.1f; 22 string coliderchecker = null; 23 public bool flag = false; 24 25 [SerializeField] 26 private Message messageScript; 27 int housetime = 0; 28 public int icegold = 0; 29 string hitobjecttag; 30 bool objectname; 31 32 33 34 35 36 37 38 // Use this for initialization 39 void Start () 40 { 41 controller = GetComponent<CharacterController>(); 42 animator = GetComponent<Animator>(); 43 audioSource = GetComponents<AudioSource>()[0]; 44 } 45 46 // Update is called once per frame 47 void Update () 48 { 49 if(moving == true) 50 { 51 h = Input.GetAxis ("Horizontal"); 52 v = Input.GetAxis ("Vertical"); 53 } 54 moveDirection = new Vector3 (h, 0, v); 55 //moveDirection = transform.TransformDirection(moveDirection); 56 moveDirection *= speed * 3.0f; 57 58 moveDirection.y -= gravity * Time.deltaTime; 59 controller.Move(moveDirection * Time.deltaTime); 60 61 if (Input.GetKeyDown(KeyCode.Z))//ここです 62 { 63 if(flag == true) 64 { 65 66 } 67 if(flag == false) 68 { 69 GetComponent<BoxCollider>().enabled = true; 70 if(coliderchecker == "いえ") 71 { 72 housetime++; 73 flag = true; 74 75 if(housetime < 6) 76 { 77 messageScript.SetMessagePanel ("こおりでできたいえだ"); 78 79 } 80 if(housetime == 6) 81 { 82 83 messageScript.SetMessagePanel ("こおりでできたいえだ"); 84 } 85 else if(housetime == 7) 86 { 87 messageScript.SetMessagePanel ("おや?かゆいところがあるようだ。"); 88 } 89 else if(housetime == 8) 90 { 91 messageScript.SetMessagePanel ("かゆいところをかいてあげた・・・<>いえは よろこんでいるみたいだ。\nいえは おれいに アイスゴールドを 2000こ くれた!"); 92 icegold =+ 2000; 93 } 94 else if(housetime > 8) 95 { 96 messageScript.SetMessagePanel ("こおりでできたいえだ。"); 97 } 98 GetComponent<BoxCollider>().enabled = false; 99 } 100 if (coliderchecker == "イグルー") 101 { 102 103 flag = true; 104 messageScript.SetMessagePanel ("イグルーだ。\n まるい。"); 105 GetComponent<BoxCollider>().enabled = false; 106 flag = false; 107 } 108 109 if (coliderchecker == "はなれた") 110 { 111 GetComponent<BoxCollider>().enabled = false; 112 flag = false; 113 } 114 115 } 116 } 117 } 118 119 void FixedUpdate()//ここは関係ない 120 { 121 122 //wr 123 if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.D) | Input.GetKey(KeyCode.RightArrow)) 124 { 125 animator.SetFloat("hayasa", 3.0f); 126 transform.localRotation = Quaternion.Euler(0, 45, 0); 127 } 128 //wl 129 else if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.LeftArrow)) 130 { 131 animator.SetFloat("hayasa", 3.0f); 132 transform.localRotation = Quaternion.Euler(0, -45, 0); 133 } 134 //w 135 else if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.UpArrow)) 136 { 137 animator.SetFloat("hayasa", 3.0f); 138 transform.localRotation = Quaternion.Euler(0, 0, 0); 139 } 140 //sr 141 else if (Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.DownArrow) && Input.GetKey(KeyCode.D) | Input.GetKey(KeyCode.RightArrow)) 142 { 143 animator.SetFloat("hayasa", 3.0f); 144 transform.localRotation = Quaternion.Euler(0, 135, 0); 145 } 146 //sl 147 else if (Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.DownArrow) && Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.LeftArrow)) 148 { 149 animator.SetFloat("hayasa", 3.0f); 150 transform.localRotation = Quaternion.Euler(0, 225, 0); 151 } 152 //s 153 else if (Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.DownArrow)) 154 { 155 animator.SetFloat("hayasa", 3.0f); 156 transform.localRotation = Quaternion.Euler(0, 180, 0); 157 } 158 //r 159 else if (Input.GetKey(KeyCode.D) | Input.GetKey(KeyCode.RightArrow)) 160 { 161 animator.SetFloat("hayasa", 3.0f); 162 transform.localRotation = Quaternion.Euler(0, 90, 0); 163 } 164 //l 165 else if (Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.LeftArrow)) 166 { 167 animator.SetFloat("hayasa", 3.0f); 168 transform.localRotation = Quaternion.Euler(0, -90, 0); 169 } 170 //nothing 171 else 172 { 173 animator.SetFloat("hayasa", 1.0f); 174 } 175 } 176 177 public void tomare() 178 { 179 moving = false; 180 h = 0; 181 v = 0; 182 } 183 184 public void ugoke() 185 { 186 moving = true; 187 } 188 189 public void PlayFootstepSE() 190 { 191 if (moving == true) 192 { 193 194 if(randomizePitch) 195 audioSource.pitch = 1.0f + Random.Range(-pitchRange, pitchRange); 196 197 audioSource.PlayOneShot(clips[Random.Range(0, clips.Length)]); 198 } 199 } 200 201 202 void OnTriggerEnter(Collider other)//ここもです!  203 { 204 objectname = true; 205 if (other.gameObject.tag == "store") 206 { 207 coliderchecker = "おみせ"; 208 } 209 else if (other.gameObject.tag == "house") 210 { 211 coliderchecker = "いえ"; 212 hitobjecttag = other.gameObject.name; 213 } 214 else if (other.gameObject.tag == "igloo") 215 { 216 coliderchecker = "イグルー"; 217 hitobjecttag = other.gameObject.name; 218 } 219 220 Debug.Log(coliderchecker); 221 objectname = false; 222 223 } 224 void OnTriggerExit(Collider other) 225 { 226 coliderchecker = "はなれた"; 227 hitobjecttag = other.gameObject.name; 228 229 } 230 231}

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

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

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

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

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

guest

回答2

0

フラグ管理が滅茶苦茶なので問題の原因が判らないならばデバッガーを使ってデバッグして下さい

投稿2021/11/16 11:33

編集2021/11/16 11:34
mimi_no_naka

総合スコア44

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

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

退会済みユーザー

退会済みユーザー

2021/11/17 04:05

どういうデバッカーを使えばいいですか?
guest

0

ベストアンサー

下記の中でflagを2回操作してますが正しいですか。

if (coliderchecker == "イグルー") { flag = true; messageScript.SetMessagePanel ("イグルーだ。\n まるい。"); GetComponent<BoxCollider>().enabled = false; flag = false; }

投稿2021/11/15 01:01

YOshim

総合スコア1085

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

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

退会済みユーザー

退会済みユーザー

2021/11/15 10:13

あ、正しくないです。falseにした方を消しました。 でも、改善されません
YOshim

2021/11/15 12:01

if (coliderchecker == "はなれた")のflag = false;はtrueの間違いではないでしょうか。
退会済みユーザー

退会済みユーザー

2021/11/16 09:44

trueにしました。でも、改善されません。
退会済みユーザー

退会済みユーザー

2021/11/23 09:54

実は・・、コライダーをもう一つ設定していたんですが、それによって istriggerのコライダーの働きが妨害されていたみたいです。 外すと解決しました。 単純なミスをしてしまって、すみませんでした。 ご迷惑をおかけしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問