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

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

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

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

Unity

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

Q&A

解決済

1回答

2154閲覧

カメラがPLAYERを見失うのを何とかしたい。

horitomo

総合スコア26

C#

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

Unity

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

0グッド

0クリップ

投稿2016/09/15 22:53

編集2016/09/16 04:54

すみません、質問させてください。
メインカメラの設定をプレイヤーに追尾するようにしています。
具体的には、スタート関数でFindGameObjectWithTag()でプレイヤーTagのオブジェクトを認識させて、カメラを追尾させています。
で、障害物に当たった時に、プレイヤーをdestroy()で消去し、ゲームオーバーとするんですが、
ゲームオーバー時に「playerTagを見つけられません」的なエラーが出てしまいます。
当然と言えば当然ですが、このような場合の対策としてどのようなものが考えられますか?
良い知恵をかしてください。よろしくお願いします。

以下追記(よろしくお願いします)

c#

1using UnityEngine; 2using System.Collections; 3 4public class CameraControl : MonoBehaviour {//カメラスクリプト 5 6 // プレイヤー. 7 private GameObject player = null; 8 9 public Vector3 offset; 10 11 // Use this for initialization 12 void Start () { 13 14 // プレイヤーのインスタンスを探しておく. 15 this.player = GameObject.FindGameObjectWithTag("Player"); 16 17 this.offset = this.transform.position - this.player.transform.position; 18 } 19 20 // Update is called once per frame 21 void Update () { 22 23 // プレイヤーと一緒に移動. 24 this.transform.position = new Vector3(player.transform.position.x + this.offset.x, player.transform.position.y + this.offset.y, this.transform.position.z); 25 26 } 27}

C#

1 2using UnityEngine; 3using System.Collections; 4 5 6 7public class PlayerMove : MonoBehaviour 8{ 9 10 11 public GameObject explosion;    //爆発エフェクト 12    private bool isQuitting = false; 13 14 // Use this for initialization 15 void Start() 16 { 17 } 18 19 // Update is called once per frame 20 void Update() 21 { 22 23 } 24 void OnCollisionEnter(Collision col)//ぶつかった時実行 25 { 26 27 28 if (col.gameObject.tag == "Ground")//地面と接触 29 { 30 gameover(); 31 32 33 } 34 } 35 void gameover() 36 {//ゲームオーバー処理 37 Ui.is_gameOver = true; 38 Destroy(this.gameObject); 39 40 } 41 void OnApplicationQuit() 42 { 43 isQuitting = true; 44 } 45 46 void OnDestroy() 47 { 48 if (!isQuitting) 49 { 50 GameObject.Instantiate(explosion, transform.position, Quaternion.identity); 51 } 52 } 53}

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

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

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

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

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

buibui80

2016/09/16 03:41

再現するためのソースコードを追記してください。
guest

回答1

0

ベストアンサー

一例ですが、このように作っていけばいいと思います。

1.カメラにプレイヤー追尾モードとは別にゲームオーバー専用のモード(プレイヤーがいなくても動作する)を追加する
2.それをフラグや関数で簡単に切り替えられるようにする
3.ゲームオーバーの処理が走るときにカメラのモードを切り替える

もっと簡単な方法としてはプレイヤーをdestroyせずに表示だけをOFFにするという方法もあります。
たしか、gameObjectにはSetActive()という関数があるので、それでfalseを指定すれば更新処理や表示をしないようにできたはずです。

投稿2016/09/16 04:22

編集2016/09/16 04:23
ishi9

総合スコア1294

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

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

horitomo

2016/09/16 05:00

void Start () { // プレイヤーのインスタンスを探しておく. this.player = GameObject.FindGameObjectWithTag("Player"); で、「PlayerTagが見つからない時は、~する。」という分岐を作るということですよね? すみません、勉強不足でコードが書けないのですが、良い関数があるのでしょうか?
ishi9

2016/09/16 05:05

ちょっと違いますが、そういうやり方でもできます。 this.player = GameObject.FindGameObjectWithTag("Player"); if (this.player == null) { // ここにプレイヤーが見つからなかったときの処理を書く } else { // ここにプレイヤーが見つかった時の処理を書く } という感じで書けばそれぞれの処理はできるはずです。
horitomo

2016/09/16 10:06

なるほど、答えはとてもシンプルだったのですね!回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問