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

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

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

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

Unity3D

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

Unity

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

Q&A

0回答

597閲覧

当たり判定が効かなくなることがある

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/11/28 00:53

unityで、眼の前の物体に触れたときZキーが押されていたら、その物体についての情報をテキストメッセージとして表示する、ということを実現しようとしています。

テキストメッセージについては、こちらのサイトを参考にしました。
テキストメッセージのサイト

処理の流れは、

処理

ついているコンポーネントです。(カプセルコライダーはもう外してあります。)
コンポーネント

コライダーの位置です。(is triggerのboxcolider)

スクリプトは、

C#

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

ですが、この状態で再生ボタンを押し、ちゃんとiglooもhouseも反応して、「よっしゃああああああ!」って思ったあと、
次に再生ボタンを押したときに、houseは反応してるけどiglooは反応しないとか、
iglooは反応しているけどhouseは反応しないなど、ちゃんと動いていません。

たまにうまくいきますが・・。

個人的に気になったのは、デバッグログでtouch変数をチェックしたときに、touch変数がなかなかfalseにならないことです。
はなれた瞬間falseになるはずですが。できればそれも改善したいです。
どうすればちゃんと動きますか?
また、構造上こんなプログラムじゃ無理なら、どう直せばいいか教えてください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問