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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

5419閲覧

鬼ごっこゲームでの範囲内判定処理について

Zonoooon

総合スコア26

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2016/12/10 16:55

Unity C#

今鬼ごっこのゲームを作っています。
Playerが鬼のような設定で、逃げていく敵を捕まえていきます。
敵はプレイヤーよりも足が早く設定されており、Playerは銃を撃ち
それが当たると敵が立ち止まるというようなゲームになっています。

逃げていく処理なのですが、敵に大きなColliderをつけ、範囲内に入ったらPlayerから逃げていくという動作にしました。
(範囲外のときはランダムに移動)
しかし敵を複数配置するとColliderが干渉?して、敵のどれかの範囲に入っているとうまく動きません。

何か良い解決方法などは無いでしょうか?
また範囲内の判定方法について他にいい処理方法があれば教えていただきたいです。
ランダムな移動についてもおすすめな処理があればぜひお願い致します。

C#

1 2//Collider判定のフラグ処理 3 void OnTriggerEnter(Collider inP) { 4 if (inP.CompareTag("Player")) 5 { 6 isPlayer = true; 7 Debug.Log("inP true"); 8 } 9 } 10 void OnTriggerExit(Collider inP) 11 { 12 if (inP.CompareTag("Player")) 13 { 14 isPlayer = false; 15 Debug.Log("inP false"); 16 } 17 }

C#

1 2//フラグにより判別して動作選択 3 void Update() 4 { 5 if (EnemyMove.isPlayer==true) { 6 プレイヤーから逃げる移動動作 7 }else{ 8 ランダムな移動 9 } 10 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

isPlayerがstaticなのが原因かと思われます。

通常、変数はクラスのインスタンス毎に持ちます。
例えばpublic bool flag;という変数があったとしたら、
EnemyAのflagとEnemyBのflagは同じ名前の別の変数です。
(EnemyAのflagのtrue/falseを切り替えても、EnemyBのflagには影響しない)

一方staticな変数は、クラスのインスタンスを作っても「共通のもの」として扱われます。
EnemyAもEnemyBもEnemyCも皆同じ「EnemyMove.isPlayer」を見ている為、
例えばEnemyAが「EnemyMove.isPlayer = true;」とした時、
EnemyBやEnemyCも「EnemyMove.isPlayer == true」となります。

isPlayerの宣言からstaticを外し、普通の変数として扱えば正常に動作するかと思います。

投稿2016/12/12 08:57

sakura_hana

総合スコア11427

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

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

Zonoooon

2016/12/12 19:11

考えてみればそうですね! UnityもC#も初心者過ぎて…。 パブリックの変数を参照するときにエラーが出てstaticつけてみたら解消されたので これをつければいいものと勘違いしていました! 試してみます。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問