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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

3073閲覧

UnityでPhotonを使ってネットワークオブジェクトをインスタンス化できず困っています。

kosho206

総合スコア41

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/07/20 09:19

https://connect.unity.com/p/pun2deshi-meruonraingemukai-fa-ru-men-sono1
こちらのサイトを参考にしてUnityのPhotonを使っているのですが、ネットワークオブジェクトがインスタンス化できず困っています。

public override void OnJoinedRoom() { // マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する var v = new Vector3(Random.Range(-3f, 3f), Random.Range(-3f, 3f)); PhotonNetwork.Instantiate("UnkomanEmpty", v, Quaternion.identity); Debug.Log("unko"); }

というコードを書いてプレファブをインスタンス化しようとしているのですが、うまくいきません。
まず、このコードではランダムな位置にオブジェクトが生成されるはずですが、実行してみるとそうはならず、シーンビューでオブジェクトを配置した場所と同じところにオブジェクトが生成されます。
また、自身のネットワークオブジェクトのみ操作できるようにする「if(photonView.IsMine)」を書くと、その{}内のコードが動かなくなります。
上記コード内のDebug.Logは動いています。
この事から、おそらくネットワークオブジェクトのインスタンス化ができていないのだとわかります。

ですが、なぜインスタンス化ができないのかがわかりません。
インスタンス化したいプレファブには、しっかりPhotonViewコンポーネントをつけてあります。
インスタンス化したいプレファブはResourcesフォルダに入れてあります。
何度も確認しましたがスペルミスは見当たりませんでした。
Photon関連のスクリプトは、全て参考先のサイトのもののコピペです。

それでもインスタンス化が上手くできない原因がわかりません。
わかる方教えてください。

参考先サイトと自分の画面が違うところが1つだけあり、PhotonViewコンポーネントの中身が少しだけサイトと違います。
これが原因かどうかはわからないのですが、一応載せておきます。
イメージ説明

またPhoton関連でもう1つ質問があって、
インスタンス化したいネットワークオブジェクトは全てResourcesフォルダに入れる必要がありますが、どこのResorcesフォルダに入れればいいのかわかりません。
Assets直下には、自分で作ったResourcesフォルダがあります。アセットストアからインポートしたPUN2の「PhotonUnityNetworking」フォルダの中にもResorcesフォルダがあります。
このうち、どちらのResourcesフォルダに入れれば良いのでしょうか?
どちらに入れても構わないのでしょうか?
今回は一応どちらのフォルダにもプレファブを入れました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

「ネットワークオブジェクトとして使いたいプレハブ」がシーンに置きっぱなしなんじゃないですか?だから

  • シーンビューでオブジェクトを配置した場所と同じところにオブジェクトが生成されます。
  • 「if(photonView.IsMine)」を書くと、その{}内のコードが動かなくなります。

といったことが起きるのではないかと思います。

PhotonViewコンポーネントの中身が少しだけサイトと違います。

PhotonView の Observed Component に Photon Transform View がありませんね。これでは Transform の情報が同期されません。つまり座標・回転・縮尺が同期されません。すなわち移動しても非オーナーのクライアントでは動きません。

全てResourcesフォルダに入れる必要がありますが、どこのResorcesフォルダに入れればいいのかわかりません。

どこでもかまいません。複数あればスキャンして見つけてくれます。
蛇足ですが、そのためにフォルダが増えれば増えるほど Unity Editor は遅くなります。

投稿2020/07/20 15:09

bboydaisuke

総合スコア5275

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

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

kosho206

2020/07/23 01:10

ありがとうございます シーンからプレイヤーObjを削除したところ、問題なくランダムな位置に生成されるようになりました。 ですが、依然として「photonView.IsMine」の{}内のコードは動かないままです。 この原因としては、どのようなことが考えられますか? また、これが上記の原因かもしれないのですが、今までは他のコードでプレイヤーオブジェクトを参照するときに[SerializeField]を使っていました。 ですが今回プレイヤーをネットワークオブジェクトにして、シーン内からはプレイヤーを削除したので、参照が切れてしまいました。 そのため、ネットワークオブジェクトを参照できるようなコードを知りたいのですが、1時間ほど調べてもわかりませんでした。 ネットワークオブジェクトを参照するにはどんなコードを書いたら良いのですか?
bboydaisuke

2020/07/23 02:45

質問を増やさないで、この質問は〆て別の質問をしてください。 > 依然として「photonView.IsMine」の{}内のコードは動かないままです。 > この原因としては、どのようなことが考えられますか? 「原因」を聞かないでください。それはわかりません。まず photonView.IsMine が true なのか false なのかをログに出力して確かめるべきです。
kosho206

2020/07/23 03:40

わかりました。 上記の2つ目の質問は新しい質問として投稿します ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問