//tips
NFT(Non-fungible token)記事を見て、VRとの親和性の高さに驚愕した。購入した人が何年先の未来を想定しているのかが気になるところ。
//微調整
Demoでゴーレムを破壊してソウルを取得してもカウントが増加しない現象が起きたので要因を確認する。
エディターでまずは確認していく。確認したらエディターの方でもドロップしなくなっている。以前修正した際にはGolemSouldropスクリプトのif (collision.gameObject.tag == "Player”)に()が余分についていたことが要因だったが今回は異なる部分でのエラーのよう。
下記のコードは反応しているようなのでまずはドロップされていないのか、ドロップされてすぐに取得しているかの確認を行う。
if (gameObject.name == "Polygonal Golem Orange (1)(Clone)")
{
Debug.Log("GohlemSoul");
Golemfollow Golemfollow = GameObject.Find("GolemOrangefollow(Clone)").GetComponent<Golemfollow>();
Golemfollow.Dropgolemitem();
}
デバッグの進み具合から問題点を見つける。
下記のdropflagが変化せず、ゴーレム消滅時golemfollowのgolem.transform.position参照先がなくなることが影響しているのかもしれないと思い、PunRPCの内容にflag=trueを加えた。
if (!dropflag)
{
this.transform.position = golem.transform.position + offset;
}
[PunRPC]
void DoDropgolemitem()
{
Debug.Log("GohlemSoulDrop");
dropitem.SetActive(true);
dropflag = true;
}
これによりゴーレムソウルのドロップは問題なく行われるようになり、取得がうまくいった。
非表示になっているSampleSceneenv2オブジェクトのSampleSceneenv2スクリプトを削除。キャラクターが生成されない問題とdeerではなくfoxが生成される問題はSampleSceneenv2スクリプトが何かしら関与していると考えた。
念の為ロビーのcontentオブジェクトにアタッチされている NetworkManagerBを確認し、ボタンを押された際の処理内容を確認したが、Env2ルームをしっかり作っており、scenemoveスクリプトでルーム名を参考に遷移先を決めているので問題はなさそう。
if (PhotonNetwork.InLobby)
{
Debug.Log("CheckMynumber()");
Debug.Log(Mynumber);
if (Mynumber == 1)
{
PhotonNetwork.JoinOrCreateRoom("Env2", roomOptions, TypedLobby.Default);
}
懸念点としてボタンを2度押しした場合はどうなるのかが出てきたので実験して試してみる。ボタンを2度以上連打してから他のシーンでルームに参加しても参加者のカウントは間違わずにできている。
きちんと全シーンでプレイヤーが正常に表示された。プレイヤー生成エラーが発生した際に再度確認する。
再度ゴーレムの挙動に戻り、ゴーレムが止まっている場合はパンチモーションも止まるはずが、パンチモーションをされている状況を観測できたので修正を加える。
プレイヤーが攻撃範囲に入った後に離脱した場合であったので、OnTriggerExitが発動しているはずである。
void OnTriggerExit(Collider col)
{
if (col.tag == "Player")
{
moveEnemy.SetState(MoveEnemy.EnemyState.Wait);
moveEnemy.punchflag = false;
moveEnemy.onchase = false;
moveEnemy.animator.SetBool("PunchAttackB", false);
}
}
デバッグログを追加。exitの際に別のコライダーを取得しているのではないかと考えた。waittimeをさらに短くして様子を見ていく。
Waittimeの短縮でかなり状況が改善されたのでこのまま進めていく。
消滅後のゴーストモードでカメラが回転できず使いずらかったのでスクリプトをPlayerMoveRに変更。
ゴーストモードの仕組みは大丈夫だが、スクリプトは直感的に使えるように常にmoveforwardとする形に変更する。
時間を短縮したことでpunchflag = true;の状態が恒常化してしまっているので void OnTriggerExit(Collider col)の方にもmoveEnemy.rightfootcollider.enabled = false;を加える。
かなり改善された。
プレイヤーがシーンに生成されない問題の手がかりが掴めたのでそちらの解決を進めていく。
エディターで参加した場合にもプレイヤーが生成されない状態で遷移してしまい、
その際には
・Nowloadingphotonスクリプトのメンバー数は4人まで記録される
・Termcheckスクリプトの 下記ではプレイヤー数が2人から0人になる
players = GameObject.FindGameObjectsWithTag("Player");
Debug.Log(players.Length);
・NPCMasterClientスクリプトのログは3回Debug.Log("notMasterClient”);で記録される
といったログを確認できた。ここから問題を解決していく。