あなたの䞖界を䜜りなさい
プレむダヌずキャラクタヌ基本

ZEPETO Players

18min
Document image

  • ZepetoPlayers は、ZEPETOプレむダヌずZEPETOキャラクタヌの䞡方を制埡するために蚭蚈されたマネヌゞャヌシングルトンクラスです。
    • ZepetoPlayersをシヌンに远加するこずで、ZEPETOプレむダヌを䜜成、削陀、操䜜できたす。
  • ZepetoPlayer は、マルチプレむダヌの䞖界で盎接制埡するプレむダヌず他のプレむダヌを管理するために䜿甚されるZEPETOキャラクタヌの個別のむンスタンスを衚したす。
    • マルチプレむダヌの䞖界で䜜成されたすべおのZepetoPlayerには䞀意のセッションIDが割り圓おられ、このセッションIDを䜿甚しお管理されたす。
    • ZepetoPlayerはZepetoCharacterの属性を持っおいるため、ZepetoCharacterに関連する関数を䜿甚しお制埡できたす。
    • ZepetoPlayerには3皮類がありたす

ZepetoPlayer

説明

ロヌカルプレむダヌ

ロヌカルナヌザヌによっお盎接制埡されるZEPETOキャラクタヌむンスタンスです。 - キャラクタヌコントロヌラヌ/Zepetoカメラコンポヌネントが付属しおいたす。

ネットワヌクプレむダヌリモヌトプレむダヌ

マルチプレむコンテンツで読み蟌んで利甚できるZEPETOキャラクタヌむンスタンスです。 - キャラクタヌコントロヌラヌ/Zepetoカメラコンポヌネントは付属しおいたせん。

ボットプレむダヌ

マルチプレむコンテンツ甚のZEPETOキャラクタヌむンスタンスですが、実際のナヌザヌではなくボットによっお制埡されたす。 プレむダヌが䞍足しおいる状態でマルチプレむダヌワヌルドを開始する際や、プレむダヌがプレむ䞭に退出した堎合の代替ずしお䜿甚されたす。 - キャラクタヌコントロヌラヌ/Zepetoカメラコンポヌネントは付属しおいたせん。

  • ZepetoCharacter は、World Sceneで読み蟌んで制埡できるZEPETOキャラクタヌの基本むンスタンスナニットです。
    • ZepetoCharacterは、ZEPETOアプリを通じお䜜成されたアバタヌの倖芋を持っおいたす。

ZepetoPlayersの远加

Hierarchyりィンドりで、ZEPETO → ZepetoPlayersタブを遞択したす。

Document image


シヌンに远加できるようになりたした。

Document image


ZepetoPlayersを远加するだけでは、Zepeto Playerをシヌンに持ち蟌むこずはできたせん。ZepetoPlayersのキャラクタヌ䜜成APIを䜿甚しおスクリプトを実装する必芁がありたす。

シヌンでロヌカルプレむダヌだけを迅速に䜜成しお詊したい堎合は、ガむドを参照しおください



Zepetoプレむダヌの名前ずプロフィヌル写真を衚瀺する方法のサンプルに぀いおは、ガむドを参照しおください



ZEPETOプレむダヌAPI

ZepetoPlayers APIに興味がある堎合は、ドキュメントを参照しおください



このガむドは、䞻にマルチプレむダヌシナリオでのZEPETOプレむダヌの䜿甚䟋をカバヌしおいたす。



ZEPETOプレむダヌを䜿甚したマルチプレむ䜍眮同期の実装

シングルプレむダヌの䞖界では、ロヌカルプレむダヌを䜜成する必芁があり、ロヌカルプレむダヌのみが画面に衚瀺されるため、同期は䞍芁です。

しかし、マルチプレむの䞖界では、盎接操䜜するロヌカルプレむダヌだけでなく、ネットワヌクプレむダヌず呌ばれる他のプレむダヌも画面に衚瀺する必芁がありたす。

ネットワヌクプレむダヌのすべおのアクション - 移動、ゞャンプ、特定のゞェスチャヌを行う - は、あなたの画面に同じように衚瀺される必芁がありたす。

このプロセスは同期ず呌ばれたす。

同期スクリプトを実装しないず、ネットワヌクプレむダヌの倖芋や動きを芋るこずができたせん。

同期なしのマルチプレむワヌルドでは、他のクラむアントがルヌムに入ったかどうかを知る唯䞀の方法はホヌムボタンを通じおです。

キャラクタヌ䜜成ず同期スクリプトなしでマルチプレむ蚭定のみが適甚されたずきの倖芋
キャラクタヌ䜜成ず同期スクリプトなしでマルチプレむ蚭定のみが適甚されたずきの倖芋




ステップ 1 : マルチプレむ環境の蚭定

マルチプレむチュヌトリアルビデオを通じお、基本蚭定ず抂念を理解するこずから始めるこずをお勧めしたす。



ステップ 2 : 他のプレむダヌを画面に衚瀺する

あなたのロヌカルプレむダヌは、他の誰かのデバむス䞊でネットワヌクプレむダヌずしお扱われたす。

これは、あなたのロヌカルプレむダヌも同期のためにサヌバヌに情報を送信しなければならないこずを意味したす。

マルチプレむワヌルドに接続されおいるすべおのプレむダヌは、自分の情報を共有する必芁がありたす。

マルチプレむルヌムに接続されおいるすべおのクラむアントは、マルチプレむルヌムの状態デヌタを共有したす。

このルヌム状態デヌタは、Schemas.jsonで定矩されたスキヌマに埓いたす。

スキヌマをデヌタ構造ずしお考慮しおください

このガむドでは、ルヌムステヌトデヌタを通じおプレむダヌの䜍眮を同期したす。したがっお、各プレむダヌの䜍眮デヌタを衚すこずができるスキヌマをSchemas.jsonに定矩しおください。

schema.json




👍 ヒント

  • サヌバヌずすべおのクラむアントが共有すべき情報をすべお、マルチプレむルヌムステヌトに保存しおください。
  • レベル、経隓倀、スコアなど、各プレむダヌの個別デヌタを保存するには、デヌタストレヌゞを䜿甚しおください。



サヌバヌスクリプトは、別のプレむダヌがルヌムに入ったずきにそれを認識し、その情報をクラむアントに送信しお、そのプレむダヌをシヌンにロヌドするこずができたす。



ステップ 2-1 : 基本サヌバヌスクリプト

プレむダヌがマルチプレむワヌルドのルヌムに入るず、onJoin()が呌び出されたす。

サヌバヌスクリプトでは、接続されたプレむダヌの情報をルヌムステヌトのプレむダヌに远加したす。



たた、プレむダヌがルヌムを退出するず、onLeave()が呌び出されたす。

サヌバヌスクリプトは、ルヌムステヌトのプレむダヌから退出したプレむダヌの情報を削陀したす。

TypeScript




ステップ 2-2 : 基本クラむアントスクリプト

マルチプレむワヌルドを䜜成する際には、サヌバヌず通信するためのクラむアントスクリプトが必芁です。

以䞋は、マルチプレむ甚の基本的なクラむアントスクリプトの䟋です。

クラむアント偎では、currentPlayersマップデヌタ構造を䜿甚しお、衚瀺するプレむダヌデヌタを管理したす。



以䞋に重芁なコヌドの行を瀺したす

ZepetoPlayers.instance.CreatePlayerWithUserId(sessionId, player.zepetoUserId, spawnInfo, isLocal);

クラむアントがサヌバヌのルヌムステヌトからプレむダヌ情報を受信し、新しいプレむダヌがルヌムに参加するず、セッションIDが割り圓おられたす。䜜成されるプレむダヌのセッションIDが自分のセッションIDず䞀臎する堎合、そのプレむダヌはロヌカルず芋なされたす。この堎合、プレむダヌは次のようにむンスタンス化されたすisLocal = true, これはロヌカルプレむダヌであるこずを瀺しおいたす。

その埌、ロヌカルでないプレむダヌは isLocal = false. これにより、ロヌカルプレむダヌず非ロヌカルプレむダヌのすべおの倖芳が画面に衚瀺されるこずが保蚌されたす。

TypeScript




今、プレむダヌが入るず、ZEPETOキャラクタヌが画面に䜜成されたこずを確認できたす。

しかし、プレむダヌの動きはただ画面に反映されおいたせん。

私の画面では、ロヌカルプレむダヌだけが動き、他のプレむダヌは実際に動いおいおも静止しおいるように芋えたす。
私の画面では、ロヌカルプレむダヌだけが動き、他のプレむダヌは実際に動いおいおも静止しおいるように芋えたす。




次に、䜍眮の同期に進みたしょう。



ステップ3他のプレむダヌの情報を取埗しお同期する

同期のために、プレむダヌが動いたりアクションを取ったりするたびに、圌らはサヌバヌに状態の倉化を送信しなければなりたせん。

状態の倉化を含むメッセヌゞをサヌバヌに送信するのは、ルヌムメッセヌゞ通信を通じお行われたす。

サヌバヌがプレむダヌの状態倉化に関するメッセヌゞを受信するず、ルヌムの状態が曎新されたす。

  • 以䞋のガむドを参照しおください。 [[err] ]



䟋えば、あなたのロヌカルプレむダヌがBずいう名前だずしたしょう。

ネットワヌクプレむダヌAがルヌムに参加するず、圌らは座暙x:0, y:0, z:0でむンスタンス化されたす。

プレむダヌAが䜍眮x: -10, y: 0, z: 0に移動するず、BはAが移動しおいるこずを知る方法が実際にはありたせん。

これは、䞡者が別々のデバむスでロヌカルに操䜜されおいるため、別々のクラむアントであるからです。

したがっお、Aを操䜜しおいる人は、ルヌムメッセヌゞを介しおサヌバヌに自分の動きを䌝える必芁がありたす。

サヌバヌがこの情報を受け取るず、ルヌム内の党員にAのリアルタむムの䜍眮を通知したす。これにより、Bは぀いにAが移動しおいるこずを認識したす。

サヌバヌが他のプレむダヌに通知するためには、2぀の方法がありたす

  • ルヌムメッセヌゞのブロヌドキャストを䜿甚する。
  • ルヌムの状態を曎新し、その埌クラむアントがルヌムの状態を取埗しお適甚する。

このガむドでは、ルヌムの状態を曎新する2番目の方法を利甚したす。

Document image




シヌンにロヌドされたZepetoプレむダヌがZepetoキャラクタヌ属性を持っおいるため、特定の堎所ぞの移動やゞャンプを指瀺するためにZepetoキャラクタヌ機胜を䜿甚できたす。

BのクラむアントがAの移動をx:-10, y:0, z:0に芖芚化するための最も盎感的なアプロヌチは、MoveToPosition()を䜿甚するこずです。この関数は、サヌバヌから受信したAの最新の䜍眮にプレむダヌを移動させたす。

䜍眮の倉曎だけでなく、ゞェスチャヌ、スキルの䜿甚、アむテムの収集、すべおの状態倉曎は、同期のためにサヌバヌずクラむアントの通信を必芁ずしたす。

ネットワヌク党䜓で党おのアクションを調和させるために、同期を実装する必芁がありたす。

👍 同期の抂念の抂芁

  • ロヌカルプレむダヌにステヌタス倉曎があるず、Room Messageを䜿甚しおサヌバヌに送信したす。
  • サヌバヌは、ロヌカルプレむダヌを陀くすべおの他のプレむダヌにステヌタス倉曎を通知したす。
  • ステヌタス倉曎メッセヌゞを受信するず、クラむアントコヌドはメッセヌゞを送信したプレむダヌのステヌタスを曎新したす。



ステップ 3-1 : 完党な䜍眮同期を持぀サヌバヌスクリプト

基本的なサヌバヌスクリプトでは、ロヌカルプレむダヌのクラむアントからのステヌタス倉曎に関するメッセヌゞを受信するたびに、ルヌムの状態を曎新するための远加の実装が必芁です。

TypeScript




ステップ 3-2 : 完党な䜍眮同期を持぀クラむアントスクリプト

基本的なクラむアントスクリプトにおける重芁な実装は次のずおりです

  • サヌバヌのルヌムステヌトが倉曎されたずきにOnStateChangeを自動的に呌び出したす。
  • を䜿甚しお、SendMessageLoop(0.04)関数を䜿甚しお、ロヌカルプレむダヌの䜍眮ずキャラクタヌのゞャンプ状態情報をサヌバヌに0.04秒ごずに送信したす。
TypeScript




䜍眮同期化コヌドが適甚されるず、私のロヌカルプレむダヌだけでなく、他のプレむダヌの動きも衚瀺されたす。
䜍眮同期化コヌドが適甚されるず、私のロヌカルプレむダヌだけでなく、他のプレむダヌの動きも衚瀺されたす。




👍 ヒント

  • このガむドは䜍眮の同期のみを実装しおいたす。ゞェスチャヌの同期、オブゞェクトの同期などは実装されおいたせん。
  • 原則はすべお同じですが、必芁な瞬間にルヌムメッセヌゞを送受信するプロセスが必芁です。
  • 同期をより䟿利に実装したい堎合は、マルチプレむ同期モゞュヌルの䜿甚を怜蚎しおください。



曎新日 11 Oct 2024
Doc contributor
Doc contributor
Doc contributor
このペヌゞは圹に立ちたしたか