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

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

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

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

Unity

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

Q&A

2回答

3101閲覧

Photon 相手のスクリプトを参照

beginer_uni

総合スコア19

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2019/03/04 23:54

編集2022/01/12 10:55

お世話になっております。今、photonでオンラインゲームを作っているのですが、オンラインでないゲームと同様に以下のスクリプトを書くとエラーが生じました。以下のスクリプトはネットワーク上でPhotonNetWork.Instantiateした同期オブジェクトにアタッチしていたスクリプトを参照しようとしたものです。
ここで確認すると同期している相手のオブジェクトにはPrefab生成時にアタッチしていたスクリプトが付いていませんでした。そのためtargetScriptがNullになっていることがわかりました。
この時targetはNullではありませんでした。
PUN2を使っているのですがネットワーク上で同期している相手のスクリプトを参照するためにはどうしたらよろしいのでしょうか。ご教授いただけると幸いです。よろしくお願いいたします。

///この上に敵のオブジェクトをtargetに格納するスクリプトがあります。 if(target!=null){ //敵のスクリプトを参照 Online targetScript = target.GetComponent<Online>(); }

追記
キャラクターにアタッチしていたスクリプト自体がキャラクターから外れています。そのためPhotonViewのリストに登録していたところがMissingになっています。このスクリプトはMonoBehaviorCallBacks,IPunObservableを継承しています。自分のプレイヤーにはついているのですが、同期した他のプレイヤーにはついていません。なお、MonoBehaviorのスクリプトはすべとのプレイヤーがしっかりついています。

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

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

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

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

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

guest

回答2

0

もしInstantiateしてから相手側だけでスクリプトをアタッチしているのでしたら、
上手くいかないと思います。

Instantiateする前のPrefabの段階で、
同期したいパラメータを実装して、
インスペクターからPhotonViewのObservedComponentsのリストに設定しないといけないと思います。

https://www.urablog.xyz/entry/2016/09/19/232345

この辺りのはなしかな

投稿2019/03/05 04:13

miikun109

総合スコア16

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

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

beginer_uni

2019/03/06 02:13

回答ありがとうございます。 確認してみるとPrefab生成時にPhotonViewのObservedComponentsのリストに登録したスクリプトがキャラクターにあらかじめアタッチしていたのですが、なくなっており、リストにはMissingとなっていました。スクリプトはMonoBehaviorCallBacks, IPunObservableを継承しているのですがこのスクリプトはなぜなくなっているのでしょうか。
miikun109

2019/03/11 13:19

うーん、状況をもう少し具体的に知りたいです。 Bの端末で 敵B を Photon.Instantiate して Aの端末上に現れた 敵B にアタッチされたスクリプトを取得しようとした。 ということでよいでしょうか? Bの端末用にビルドしたものはAの端末のものと、差異はないでしょうか。 また、Photon.Instantiate する前の Prefab 自体にはちゃんとスクリプトがアタッチされていますでしょうか。 (プログラムで動的にAddComponentしたりしてないでしょうか)
guest

0

Photon使ってないんでわかんないんですけど、Unityのネットワーク系でありがちなやつかもです

>Prefab生成時にアタッチしていたスクリプトが付いていませんでした。
Start関数で、AddComponentしたスクリプトって意味でしょうか?

ネットワーク系ってパケットをまとめて処理するので、
パケットの何処かでInstantiateしても、Start がまだ呼ばれず、
今あるパケットを全部処理したあと、Startが呼ばれます

ざっと調べたところ、Startの代わりにOnPhotonInstantiate で初期化するといいかもしれません

投稿2019/03/05 01:54

izmktr

総合スコア2856

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

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

beginer_uni

2019/03/06 02:18

回答ありがとうございます。 OnPhotonInstantiateというメソッドがあるのですね。理解が深まりました。ありがとうございます。 今、Start関数でAddComponentしているのですがそれ以前にキャラクターにアタッチしたスクリプトがキャラクターから外れています。自分のキャラクターはついているのですが、同期したキャラにはついておりません。MonoBehaviorCallBacksとIPunObservbleを継承しているのですがなぜ外れているのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問