//tips
嶋津様打ち合わせ
//photonでのanimatorの同期
前回確認中であったロビーからシーンに遷移し、アイテムを使用したプレイヤーにアニメーションをさせる流れの際、アニメーションの同期がうまくできない不具合の問題を解決していく。
PhotonViewのObserverにPhotonAnimatorViewを追加するが、プレイヤーは最初アニメーションがついているアイテム棒を持っておらず、何もない段階でPhotonAnimatorViewを追加するとエラーメッセージが表示され、再生しても同期はうまくできない。
さらにアイテム棒自身にPhotonAnimatorViewおよびPhotonViewをつけても同期されず、PhotonAnimatorViewに
Animator doesn’t have animator…
コンソールには下記が表示されている。
MissingComponentException: There is no 'Animator' attached to the "rodPivot" game object, but a script is trying to access it.
You probably need to add a Animator to the game object "rodPivot". Or your script needs to check if the component is attached before using it.
Photon.Pun.PhotonAnimatorView.Update () (at Assets/Photon/PhotonUnityNetworking/Code/Views/PhotonAnimatorView.cs:129)
Animationコンポーネントでアイテムにアニメーションをさせていただのでこれが原因なのかもしれない。
Animator コンポーネントをアタッチし、Animationコンポーネントを外してみる。無事にanimationが同期されるようになった。
従来のrodpivotのanimationをAnimatorコンポーネントとして作成し直していく。
Animator コンポーネントとAnimationコンポーネントの違いは下記参照。
https://docs.unity3d.com/ja/current/Manual/MecanimFAQ.html
つまり、初期のunityのanimation設定のままではphoton同期は使えないので、一手間加える必要がある。
また、全てのアイテムを観察対象にすることになってしまうので、こちらの負荷は問題ないのか確認。
rodanim用のAnimatorコンポーネントを作成していく。
//同期後シーンのプレイヤーのスポーン状態の改善
同期後にプレイヤーが転倒してしまう問題を改善した。
最初はSceneスクリプトのプレイヤー生成箇所GameObject Prefab = PhotonNetwork.Instantiate("GamePlayer1", v, Quaternion.identity);に問題があるのかと思い、Debug.Logを使用したが、
Quaternion.identity(0.0, 0.0, 0.0, 1.0)
UnityEngine.Debug:Log(Object)
SampleScene1125:Start() (at Assets/SampleScene1125.cs:24)
と問題ないことがわかった。ちなみにQuaternion.identity(0.0, 0.0, 0.0, 1.0)は度数ではないので変換する必要があるもの。
問題になっていたのは、初期スポーンからの落下でプレイヤーの向きが変わってしまうところで、GamePlayerスクリプトのtransform.rotation = Quaternion.LookRotation(diff); により、落下中のy軸変化まで取られてしまっていることが問題であった。
Vector3 diff = transform.position - Player_pos;
これをy軸のみ固定にしてあげることで解決した。
Vector3 diff = transform.position - Player_pos; //プレイヤーがどの方向に進んでいるかがわかるように、初期位置と現在地の座標差分を取得
//diffのy要素0固定
diff = new Vector3(diff.x,0,diff.z);
プレイヤーが地面に接触時にboolのフラッグ分岐しようかと考えたが、y軸固定の方がずっとシンプルで綺麗なコードだったのでこちらを採用した。