unityで、プレイヤーが複数個所にある鍵に触れるたびカウントが1ずつ減っていき、0になると条件を満たして一定の挙動をする、といった流れを作っています。
現状、一個でも鍵に触れると一気にカウントが0になってしまいます。
鍵は最初は消えていて、あるトリガー内に入ると現れるようになっていますが、そのためのスクリプトに何か問題があるようです。
鍵の出現スクリプト
C#
1public class appearWork : MonoBehaviour 2{ 3 private Collider col; 4 5 void Start () 6 { 7 //はじめは自身と自身のコライダーは消えている 8 col = gameObject.GetComponent<Collider>(); 9 10 this.gameObject.GetComponent<MeshRenderer>().enabled = false; 11 if (col != null) 12 col.enabled = false; 13 } 14 15 16 void Update () 17 { 18 //トリガー内に入ると自身と自身のコライダーを出現させる 19 if (trapTrigger.trapFlag == true) 20 { 21 this.gameObject.GetComponent<MeshRenderer>().enabled = true; 22 if(col != null) 23 col.enabled = true; 24 } 25 } 26}
トリガーのスクリプト(12/18追記)
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class trapTrigger : MonoBehaviour { 6 7 public static bool trapFlag; 8 9 void Start () 10 { 11 trapFlag = false; 12 } 13 14 void OnTriggerEnter(Collider col) 15 { 16 if (col.gameObject.tag == "chara") 17 { 18 trapFlag = true; 19 } 20 } 21} 22
colがかかわる部分
if (col != null) col.enabled = false;
if (col != null) col.enabled = true;
をコメントアウトすると正常にカウントが減っていくので、colの部分の書き方に問題があると思われますが、
解決方法が思い当たらず困っています。ご教授いただけますと幸いです。
(if (col != null)があるのは、コライダーがないオブジェクトにもスクリプトを適用する予定だからです。この条件をなくしても、カウントのおかしな減り方に変わりはありません)
ちなみに鍵はプレイヤーが触れると再び消えるようになっています。
トリガー内に入ることで出現した鍵に触れると、一度コライダーにつっかえる様子があるので(本来なら触れたそばから消えるのようになっているのでコライダーにつっかえることはない)、
コライダーの表示非表示の切り替えタイミングにも問題がある可能性もあります。
以下の通りです。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class keyWork : MonoBehaviour 6{ 7 bool flag = false ; 8 float alpha = 1.0f ; 9 float R; 10 float G; 11 float B; 12 13 void Start () 14 { 15 R = this.GetComponent<Renderer> ().material.color.r; 16 G = this.GetComponent<Renderer> ().material.color.g; 17 B = this.GetComponent<Renderer> ().material.color.b; 18 } 19 20 void Update () 21 { 22 //キャラが触れるとフェードアウトして消える 23 if (flag == true) 24 { 25 this.gameObject.GetComponent<Renderer> ().material.color = new Color (R, G, B, alpha); 26 alpha -= 0.2f; 27 if (alpha < 0) 28 { 29 alpha = 0; 30 Destroy(this.gameObject, 1.0f); 31 } 32 } 33 } 34 35 void OnCollisionEnter(Collision col) 36 { 37 //プレイヤーが触れるとフェードアウトするためのフラグをtrueにする、コライダーを消す 38 if (col.gameObject.tag == "chara") 39 { 40 gameObject.GetComponent<CapsuleCollider> ().enabled = false; 41 flag = true; 42 } 43 } 44} 45
OnCollisionEnter内にDebug.Logでカウント数を表示するようにしたところ、最初のカウントが3の場合、210000000000...と表示されました。
<<12/18追記>>
カウント数に関するスクリプトです。
C#
1public class charaColWork : MonoBehaviour 2{ 3 public int count = 3; 4 public GameObject trigger; //鍵を集めきったら現れるトリガー 5 6 void Start() 7 { 8 trigger.SetActive(false); 9 } 10 11 12 void OnCollisionEnter(Collision col) 13 { 14 //鍵に接触したとき 15 if (col.gameObject.tag == "key") 16 { 17 if (count > 0) 18 { 19 count--; 20 } 21 if(count == 0) 22 { 23 trigger.SetActive(true); 24 } 25 } 26}
<<12/18追記>>
下二つのスクリプト、keyWorkとCharaColWorkは他シーンでも使用しており、そのシーンでは
特に問題はありません。
上二つのappeearWorkとtrapTriggerを適用させているシーンのみ問題が発生しています。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。