code VR

Unity×VR(151)

スポンサーリンク

//tips

//ゴーレム同期対応

新規ゴーレムの追加に対応して、Golemfollowスクリプトを異なるgolemfollowオブジェクトでも使用できるように、dropitem名で検索するオブジェクトを変える。

void Update()
{
Vector3 offset = new Vector3(0, 3, 0);

if(dropitem.name == "dropitem")
{
golem = GameObject.Find("Polygonal Golem Orange (1)(Clone)");

if (golem != null)
{

if (!dropflag)
{
this.transform.position = golem.transform.position + offset;
}
}
}

if (dropitem.name == "dropitem2")
{
golem = GameObject.Find("Polygonal Golem Orange (2)(Clone)");

if (golem != null)
{

if (!dropflag)
{
this.transform.position = golem.transform.position + offset;
}
}
}

if (dropitem.name == "dropitem3")
{
golem = GameObject.Find("Polygonal Golem Orange (3)(Clone)");

if (golem != null)
{

if (!dropflag)
{
this.transform.position = golem.transform.position + offset;
}
}

また、HPscript2の方も消滅時に参照するオブジェクトを追加する。

if (hp <= 0)
{
Debug.Log(gameObject.name);

if (gameObject.name == "Polygonal Golem Orange (1)(Clone)")
{
Debug.Log("GohlemSoul");

Golemfollow Golemfollow = GameObject.Find("GolemOrangefollow(Clone)").GetComponent<Golemfollow>();
Golemfollow.Dropgolemitem();
}

if (gameObject.name == "Polygonal Golem Orange (2)(Clone)")
{
Debug.Log("GohlemSoul");

Golemfollow Golemfollow = GameObject.Find("GolemOrangefollow2(Clone)").GetComponent<Golemfollow>();
Golemfollow.Dropgolemitem();
}

if (gameObject.name == "Polygonal Golem Orange (3)(Clone)")
{
Debug.Log("GohlemSoul");

Golemfollow Golemfollow = GameObject.Find("GolemOrangefollow3(Clone)").GetComponent<Golemfollow>();
Golemfollow.Dropgolemitem();
}

photonView.RPC(nameof(DestroyObj), RpcTarget.All);
//Destroy(this.gameObject); //ゲームオブジェクトが破壊される

}

ゴーレム破壊時のドロップアイテムの出現場所がおかしいこと、なぜかドロップアイテムが触れていないので非表示になっていること、プレイヤーの頭上に保有しているドロップアイテムが表示状態で浮かんでいることなどの問題が発生しているので順次解決する。

まずGolemfollowスクリプトのif(dropitem.name == "dropitem”)のfindの仕方できちんと自身が保有しているオブジェクト名を取得できているのかをデバッグで確認する必要はある。

デバッグではしっかりdropitemのnameが確認できた。

ヒエラルキーの名前をよく見てみると生成するゴーレムが全てPolygonal Golem Orange (1)になっていたので、そちらを(2),(3)に修正。

var vg = new Vector3(33, 5, 110);//ゴーレム生成
PhotonNetwork.Instantiate("Polygonal Golem Orange (1)", vg, Quaternion.identity);

var vgf = new Vector3(33, 8, 110);//ゴーレムfollow生成
PhotonNetwork.Instantiate("GolemOrangefollow", vgf, Quaternion.identity);

var vg2 = new Vector3(32, 5, 110);//ゴーレム生成
PhotonNetwork.Instantiate("Polygonal Golem Orange (2)", vg2, Quaternion.identity);

var vgf2 = new Vector3(32, 8, 110);//ゴーレムfollow生成
PhotonNetwork.Instantiate("GolemOrangefollow2", vgf2, Quaternion.identity);

var vg3 = new Vector3(31, 5, 110);//ゴーレム生成
PhotonNetwork.Instantiate("Polygonal Golem Orange (3)", vg3, Quaternion.identity);

var vgf3 = new Vector3(31, 8, 110);//ゴーレムfollow生成
PhotonNetwork.Instantiate("GolemOrangefollow3", vgf3, Quaternion.identity);

こちらで再度動作を確認していく。

下記のエラーからリソースフォルダ下に入れてあるprefabがうまく参照されていないことがわかる。

DefaultPool failed to load "Polygonal Golem Orange (2)". Make sure it's in a "Resources" folder. Or use a custom IPunPrefabPool.
UnityEngine.Debug:LogError(Object)

NullReferenceException: Object reference not set to an instance of an object
Photon.Pun.DefaultPool.Instantiate (System.String prefabId, UnityEngine.Vector3 position,

Prefabの名前を少し変更して再度トライ。それでもエラーが出たので検索してみるとphoton特有の問題のよう。私の場合はprefabを複製したから起こったのかもしれない。

https://forum.photonengine.com/discussion/16037/non-resource-located-network-prefabs

https://forum.photonengine.com/discussion/comment/52580#Comment_52580

Prefabを再度インポートしたり、スクリプトとunityを行き来すると治るなどの解決方法があるとのこと。

生成したprefabの名前を全コピーして再度スクリプトに貼り付けると半角のスペースがunityの方で追加されていることがわかり、そこを反映してあげると無事に3体のゴーレムを生成することができた。

今まで生成できなかったのは名前指定が正確ではないと判断されていたためだと分かった。

これにより3体のゴーレムを倒すと各々がアイテムを倒された位置にsoulをドロップするようになった。

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-code, VR
-,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.