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}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/11/17 04:05
2021/11/17 04:18