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

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

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

4

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

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, VR
-,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.