//tips
//キャラクターのシーン導入
先に作成したキャラクターを導入していく。まずはDeerから導入。シーンのヒエラルキーが大量のオブジェクトで見にくくなっているので空オブジェクトを作成し、環境オブジェクトをその中にまとめる。
Deerオブジェクトとcanvasを新たに追加したが紐付いていたスクリプト関係が全て外れてしまっているので設定し直し。
導入して設定したUIをクリックしてもなぜかクリックできない。canvasのUIにアクセスできない現象が生じている。
複数のカメラがフィールドに存在するせいなのかと色々調べていたところ。通常シーン内にButtonを追加するとEvent Systemが自動的に用意されるが、他のシーンのUIをそのままコピーで持ってくるとEvent Systemは自前で用意する必要があるとのこと。
無事に動かすことができた。ただ、なぜかゴーレムがwait中なのに動いてしまっている。下記の変更をしたが停止しない。
(tempState == EnemyState.Wait)
{
//elapsedTime = 0f;
state = tempState;
arrived = true;
velocity = Vector3.zero;
rigd.velocity = velocity;
}
GohlemTestシーンを確認して見たらきちんと停止してパンチを行なっている。env2シーンのインスペクターを見直してもアタッチ漏れはなさそう。
Cameraに移るゲームビューではなく、通常の操作シーンビューではアクションを行なっていることが確認できた。
要因が分からないので一旦確認中。
//キャラクターのprefab生成
スポーンポイントを指定してキャラクターを生成し、その際にアタッチから外れるものを確認し、スクリプトでアタッチされるように修正していく。
SampleSceneスクリプトを使用して簡易的にphotonでのキャラクター生成を行なっていく。下記を作成し、生成。
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
public class SampleSceneenv2 : MonoBehaviourPunCallbacks
{
private void Start()
{
// PhotonServerSettingsに設定した内容を使ってマスターサーバーへ接続する
PhotonNetwork.ConnectUsingSettings();
}
// マスターサーバーへの接続が成功した時に呼ばれるコールバック
public override void OnConnectedToMaster()
{
// "room"という名前のルームに参加する(ルームが無ければ作成してから参加する)
PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions(), TypedLobby.Default);
}
// マッチングが成功した時に呼ばれるコールバック
public override void OnJoinedRoom()
{
PhotonNetwork.IsMessageQueueRunning = true;
// マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する
var v = new Vector3(35,5,120);
PhotonNetwork.Instantiate("Deer", v, Quaternion.identity);
}
// 他プレイヤーが参加した時に呼ばれるコールバック
public override void OnPlayerEnteredRoom(Player player)
{
Debug.Log(player.NickName + "が参加しました");
}
// 他プレイヤーが退出した時に呼ばれるコールバック
public override void OnPlayerLeftRoom(Player player)
{
Debug.Log(player.NickName + "が退出しました");
}
}
この際に、photonviewコンポーネント及びphotontransformviewコンポーネントをアタッチ。
Prefabから生成されたオブジェクトに関しては、minimap及びdarkpanelは外れてしまう。他のオブジェクトでも[SerializeField]でオブジェクト参照していたものは全て外れているはずなのでそちらも別の形で対応していく必要がある。
Startメソッド時点でfindで見つけてしまうことにする。新たにEnvPlaymove5photonスクリプトを作成。canvasとの連携はこの時点でほぼ外れてしまっている。
[SerializeField] GameObject Minimap;の代わりにMinimap = GameObject.Find("MinimapImage”);などと変更していく。
Photonで同期して動かして見たところキャラクターのアニメーションの連携がされていないこと。ゴーレムの同期がかなり遅れてなされるなどの問題が見えた。ゴーレムにもphotonviewを付与して動きを同期させることを考える。
photonanimatorviewをアタッチして、Disable(同期しない)からContinuous(1秒間に10回のペースでの同期し。受信側では送られてきたパラメータ値を1フレームに1つずつ読み込んで再現する)へ変更。
キャラクターの同期タイミングを確認して見たがいまいち。Discrete(1秒間に10回のペースで同期を行う)に変更。こちらも遅れて同期される違和感がある。
顔の正面と移動方向が一致していないのとアクションと移動が一致していないチグハグ感がある。
Photon同期の部分はネックになりそう。こちらも他の方法がないか確認。