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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

2回答

4599閲覧

Destroy(this.gameObject);でそのオブジェクト以外も消えてしまう(Destroyするためのフラグが一気に変わってしまう)

toricotori

総合スコア14

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2017/12/20 09:07

複数あるキーアイテムに触れると触れたものがフェードアウトして消えるというスクリプトを書いているのですが、
一個でもアイテムに触れるとアイテムがすべて消えてしまいます。
キーアイテムは最初表示されておらず、あるトリガー内に入ると表示されるようになっています。
触れたものから一個ずつ消えるようにしたいです。お力添えいただけると幸いです。

関連スクリプトは以下の通りです。

C#

1//キーアイテムの基本スクリプト。プレイヤーが触れるとフェードアウトして消える 2public class keyWork : MonoBehaviour 3{ 4 public static bool flag = false ; 5 float alpha = 1.0f ; 6 float R; 7 float G; 8 float B; 9 10 void Start () 11 { 12 R = this.GetComponent<Renderer> ().material.color.r; 13 G = this.GetComponent<Renderer> ().material.color.g; 14 B = this.GetComponent<Renderer> ().material.color.b; 15 } 16 17 void Update () 18 { 19    //フェードアウトして消えるアニメーションを始める 20 if (flag == true) 21 { 22 this.gameObject.GetComponent<Renderer> ().material.color = new Color (R, G, B, alpha); 23 alpha -= 0.2f; 24 if (alpha < 0) 25 { 26 alpha = 0; 27 Destroy(this.gameObject, 1.0f); 28 } 29 } 30 } 31 32 void OnCollisionEnter(Collision col) 33 { 34    //プレイヤーが触れるとコライダーを消す。フェードアウトするアニメーションを始めるフラグをtrueにする 35 if (col.gameObject.tag == "chara") 36 { 37 this.gameObject.GetComponent<Collider> ().enabled = false; 38 flag = true; 39 } 40 } 41} 42

C#

1//トリガーのスクリプト。プレイヤーがトリガー内に入るとキーアイテムが現れるフラグをtrueにする 2public class trapTrigger : MonoBehaviour { 3 4 public static bool trapFlag; 5 6 void Start () 7 { 8 trapFlag = false; 9 } 10 11 void OnTriggerEnter(Collider col) 12 { 13 if (col.gameObject.tag == "chara") 14 { 15 trapFlag = true; 16 } 17 } 18} 19

C#

1//アタッチしたオブジェクトをトリガー内に入ったら表示するようにする 2public class appearWork : MonoBehaviour 3{ 4 private Collider col; 5 6 void Start () 7 { 8    //オブジェクトのコライダーを取得 9 col = this.gameObject.GetComponent<Collider>(); 10 11    //コライダーがあるオブジェクトの場合、最初はコライダー非表示 12 if (col != null) 13 col.enabled = false; 14    //最初はオブジェクト非表示 15 this.gameObject.GetComponent<MeshRenderer>().enabled = false; 16 } 17 18 void Update () 19 { 20    //トリガー内に入ったら 21 if (trapTrigger.trapFlag == true) 22 {  23      //コライダーがあるオブジェクトで、まだキャラクターが触れていないときコライダー表示 24 if(col != null && keyWork.flag == false) 25 col.enabled = true; 26      //オブジェクトを表示 27 this.gameObject.GetComponent<MeshRenderer>().enabled = true; 28 } 29 } 30}

当初はappearWorkでの、トリガー内に入った時のコライダー表示の条件に[keyWork.flag == false]はありませんでしたが、
そうするとトリガー内に入った段階で常にコライダーが表示されるようになり、プレイヤーが触れたあともコライダーが消えなくなってしまったため、[keyWork.flag == false]を追加したところ、コライダーは消えるようになりましたが、今度は題字のように、プレイヤーが触れたあとオブジェクトが一気に消えるようになってしまいました。

プレイヤーが触れた段階で、すべてのオブジェクトのkeyWork内のflagがtrueになってしまっているのだと思っています。

解決方法や、別の問題などがありましたら、ぜひお教えいただきたいです。よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

keyWorkのflagがstaticになっているのが原因です。

staticがある変数はクラスに属しているため、1つの変数を全てのインスタンスが共有して使うことになります。
そのため、あるインスタンスが変数を書き換えた場合、それが全てのインスタンスに反映されてしまいます。

逆にstaticが無い変数はそれぞれのインスタンスに属しているため、あるインスタンスが変数を書き換えても、他のインスタンスには反映されません。

投稿2017/12/20 09:33

fiveHundred

総合スコア9774

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

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

toricotori

2017/12/20 13:16

ご回答ありがとうございます。 おっしゃるとおり、staticを使わない形にしたところ解決いたしました。 スクリプト間での変数等の共有は何も考えずstaticを使っていたので、いい勉強になりました。ありがとうございました。
guest

0

触れたものはオブジェクトが消え、他の消えたように見えているのはマテリアルのアルファ値が0になって見えなくなっているのではないでしょうか。

エディターでテストされているのであればプレイ中にヒエラルキーの情報を確かめてみてください。

すみません、追記です。

アルファ値をいじっている部分をコメントアウトして確かめてみると早いかなと思いました。

投稿2017/12/20 09:24

編集2017/12/20 09:26
hien

総合スコア69

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

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

toricotori

2017/12/20 13:19

ご回答ありがとうございます。 今回はアルファの問題ではありませんでしたが、 アルファ値等全体をよく見る必要がありますね。 参考になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問