リアルタイム同期¶
アバターの位置やアニメーションをリアルタイムに同期することで、プラットフォームにまたがる複数人同時参加型の体験を構築できます。
photon の利用¶
マルチプレイヤープラットフォーム photon との連携する方法を、デモを参照しながら説明します。アバタープレハブに photon のコンポーネントを割り当てることで、photon を使った一般的なリアルタイム同期を実装できます。このページでは、photon の一般的な説明は割愛します。
デモ¶
photon をインポートした後、 Assets > AvatarPlay Demo Photon > 01. Photon Demo > Scenes
以下のシーンを実行してください。見た目は単純なアバターロードですが、photon を通してリアルタイム同期された状態となっています。
Info
photon のデモは基本のSDKパッケージに含まれていません。Avatar Play 担当者から別途入手してください。
実装¶
アバタープレハブの設定¶
アバターは動的にインスタンス化します。アバタープレハブを Resources
以下にコピーし、photon のコンポーネントを割り当てています。
デモでは、位置/回転/スケール/アニメーションを同期するよう設定しています。
GameController.cs¶
各クライアントで実行される、ゲームロジックの実装です。photon の設定時に、アバターIDがリアルタイム同期するクライアント間で共有されるよう、プレイヤーのカスタムプロパティに設定しておきます。
// アバターIDの設定
var customProps = new ExitGames.Client.Photon.Hashtable ();
customProps.Add ("avatarID", AvatarSDK.avatarID);
PhotonNetwork.player.SetCustomProperties (customProps);
クライアントがルームに入室すると OnJoinedRoom
メソッドが呼ばれますので、そこでクライアント自身のアバターをインスタンス化します。このインスタンス化処理は、ルームに接続している各クライアントで実行されます。
// Photonアバターのインスタンス化
var myAvatar = PhotonNetwork.Instantiate ("PhotonAvatar", Vector3.zero, Quaternion.identity, 0);
Avatar.cs¶
個々のアバターでの実装です。リアルタイム同期の対象となるオブジェクトであるため、 Photon.MonoBehaviour
を継承したスクリプトに実装します。アバターがインスタンス化された後、クライアントのアバターIDでコーデをロードします。
public class PhotonAvatar : Photon.MonoBehaviour
{
void Start()
{
var avatarID = (long)photonView.owner.CustomProperties ["avatarID"];
var avatarCoordinator = GetComponent<AvatarCoordinator> ();
StartCoroutine(avatarCoordinator.LoadByAvatarIDAsync (avatarID));
}
}
同期の確認¶
複数の端末が必要となるため、Unityエディタ上でデモを通して確認することは難しいです。複数の実機に配備するなどして確認してみてください。
ルーム内コーデ¶
リアルタイム通信におけるルームなど、一時的な空間内でのみ有効となるコーデ(以後、ルーム内コーデ)を作成可能です。ルーム内コーデは自社アプリ側で着せ替え処理できるため、例えばシーン内にスピードアップ効果を持つ服アイテムを配置し、それを取得し着用したユーザは移動スピードがアップする、といった体験を実現できます。
Room.cs
¶
スクリプト Room.cs
にはルーム内コーデを作成・更新する API が収録されています。リアルタイム通信の API と同じように利用する想定で設計されています。
// ルームの作成と入室
// PhotonNetwork.JoinOrCreateRoom と同じタイミングで呼ぶ想定。ルーム名も合わせると良い。
yield return Room.JoinOrCreate("myRoom");
// アイテムIDを渡して、ルーム内アイテムを変更する
yield return Room.SetItem("myRoom", itemID);
// ルーム内コーデをメインコーデに戻す
yield return Room.ResetCoord("myRoom");
// ルームを退室する
// PhotonNetwork.LeaveRoom と同じタイミングで呼ぶ想定。
yield return Room.Leave("myRoom");
Info
自社アプリ内で利用可能なアイテムは、Avatar Play 担当者に確認してください。
デモ¶
Assets > AvatarPlay Demo > 07. In Room Coordination Demo > Scenes
以下のシーンを実行してください。アバターを十字キーで操作し、アバターが触れた服アイテムに着替えます。中央のキューブに触れると、メインアバターに戻ります。
ルーム内コーデの有効期限¶
ルームは作成から一定期間経過すると削除されます。作成から1時間以上経過したルームの利用は避けるようお願いします。