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

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

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

Photon Cloudは、オンラインゲーム開発向けネットワークエンジン。リアルタイムマルチプレイ通信のプラットフォームであるPhotonの一つです。ネットワーク通信によるオンラインゲームを開発・運営するために必要なツールがサーバー環境に構築されています。

C#

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

Unity3D

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

Unity

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

Q&A

0回答

663閲覧

Unity PUN2 キャラクターの生成時間のズレにより値が代入できない

Jejeje

総合スコア38

Photon Cloud

Photon Cloudは、オンラインゲーム開発向けネットワークエンジン。リアルタイムマルチプレイ通信のプラットフォームであるPhotonの一つです。ネットワーク通信によるオンラインゲームを開発・運営するために必要なツールがサーバー環境に構築されています。

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/12/01 17:56

実現したいこと

ゲーム終了後に勝利パネルをアクティブにして表示したい

ゲームは戦車で弾をうって対戦するオンラインゲームです
ルームに入りゲームが開始するとPlayerID.csによりキャラクターがそれぞれの位置に生成されます
キャラクターがうった弾にぶつかるとキャラクターが非アクティブするようにしています

実現したいことはゲームキャラクター(生き残っているキャラ)が残り一人になったらWinPanelをアクティブにして表示させることです

残り一人になったらWinPanelを表示するのはSyouhai.csで制御しています
(Playerの誰かが非アクティブになった時、かつプレイヤーの人数が残り一人になったならWinPanelを表示するというものです。ここに貼ったコードにはまだ書かれてませんが)

解決法として考えているプランは、
①参加者のキャラクターを同時に生成できるようにする
②Playerの検索方法、タイミングを変える
などでしょうか

原因

Player1とPlayer2の生成タイミングにラグが生じていることで、Player1側でSyouhai.csのvoid Update()が動く時にまだPlayer2が生成されておらず、値が入れられないため中身が空なのでエラーが起きる

(一つ謎なのが、この前までは同時に生成されていた気がすることです)

発生している問題・エラーメッセージ

NullReferenceException: Object reference not set to an instance of an object Syouhai.Update () (at Assets/C#script/Syouhai.cs:36)

該当のソースコード(Syouhai.cs)

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Photon.Pun; 5using Photon.Realtime; 6 7public class Syouhai : MonoBehaviourPun 8{ 9 public GameObject WinPanel; 10 public GameObject[] tankObjects; 11 GameObject player1; 12 GameObject player2; 13 14 // Start is called before the first frame update 15 void Start() 16 { 17 18 } 19 20 // Update is called once per frame 21 void Update() 22 { 23 player1 = GameObject.Find("GamePlayer(Clone)"); 24 player2 = GameObject.Find("GamePlayer2(Clone)"); 25 26 Debug.Log("player1は" + player1); 27 Debug.Log("player2は" + player2); 28 29 30 31 32 if(!player1.activeSelf) 33 { 34 Debug.Log("プレイヤー1はactive?" + !player1.activeSelf); 35 } 36 if (!player2.activeSelf) 37 { 38 Debug.Log("プレイヤー2はactive?" + !player2.activeSelf); 39 } 40 41 tankObjects = GameObject.FindGameObjectsWithTag("tank"); 42 Debug.Log("tankObjects配列 = " + tankObjects.Length); 43 44 } 45 46} 47

該当のソースコード(PlayerID.cs)

C#

1using System; 2using System.Collections; 3using UnityEngine; 4using UnityEngine.SceneManagement; 5using Photon.Pun; 6using Photon.Realtime; 7 8public class PlayerID : MonoBehaviourPunCallbacks 9{ 10 public FixedJoystick joystick; 11 12 public GameObject gameplayer1; 13 public GameObject gameplayer2; 14 15 int id; 16 17 void Awake() 18 { 19 PhotonNetwork.AutomaticallySyncScene = false; 20 21 id = PhotonNetwork.LocalPlayer.ActorNumber; 22 var v = new Vector3(-5.5f, 0.5f, -3.5f); 23 var v2 = new Vector3(5.5f, 0.5f, 3.5f); 24 25 if (!PhotonNetwork.IsConnected) //Phootnに接続されていなければ 26 { 27 SceneManager.LoadScene("MultiMode"); //ログイン画面に戻る 28 return; 29 } 30 if (id == 1) 31 { 32 Debug.Log("ID = " + id); 33 34 GameObject Player1 = PhotonNetwork.Instantiate(this.gameplayer1.name, v, Quaternion.identity); 35 } 36 else if (id == 2) 37 { 38 Debug.Log("ID = " + id); 39 40 GameObject Player2 = PhotonNetwork.Instantiate(this.gameplayer2.name, v2, Quaternion.identity); 41 42 } 43 44 45 } 46 47 void Update() 48 { 49 50 51 } 52}

試したこと

void Update()内でキャラクターオブジェクトを検索すればよいと考えたが変わらなかった

補足情報(FW/ツールのバージョンなど)

Unity 2019.4.11f1

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問