ジェスチャー
ZepetoWorldContent APIを使用すると、希望するジェスチャー/ポーズカテゴリのサムネイルを設定し、サムネイルがクリックされたときに特定のジェスチャー/ポーズを有効にすることができます。
ZepetoWorldContent APIを使用するには、次のようにインポート文を書く必要があります。
ジェスチャー/ポーズ情報を含むContentクラスのメンバ変数および関数情報は以下の通りです。
API | 説明 |
---|---|
public get Id(): string | コンテンツユニークID |
public get Title(): string | ジェスチャー、ポーズタイトルテキスト - 言語はデバイスの言語に応じて自動的に翻訳されます |
public get Thumbnail(): UnityEngine.Texture2D | 2Dサムネイル |
public get AnimationClip(): UnityEngine.AnimationClip | ジェスチャーアニメーションクリップ |
public get IsDownloadedThumbnail(): boolean | このサムネイルを以前にダウンロードしたかどうかを判断するための関数 |
public get IsDownloadedAnimation(): boolean | このアニメーションクリップを以前にダウンロードしたかどうかを判断するための関数 |
public DownloadAnimation($complete: System.Action):void | アニメーションクリップをダウンロードする関数で、完了コールバックを受け取ります - IsDownloadedAnimation()がfalseの場合、DownloadAnimation()を呼び出すように実装します。 |
public DownloadThumbnail($complete: System.Action):void | サムネイルをダウンロードするための関数 - IsDownloadedThumbnail()がfalseの場合、DownloadThumbnail()を呼び出すように実装します。 |
OfficialContentType : enum | コンテンツの種類(World 1.9.0以降) - ジェスチャー = 2 - ポーズ = 4 - セルフィー = 8 - ジェスチャー挨拶 = 16 - ジェスチャーポーズ = 32 - ジェスチャー肯定 = 64 - ジェスチャーダンス = 128 - ジェスチャー否定 = 256 - ジェスチャーその他 = 512 - すべて = 14 |
- 既存の関数を使用できますが、public DownloadThumbnail($character: ZEPETO_Character_Controller.ZepetoCharacter, $complete: System.Action):void、機能に関する問題はありません。ただし、Zepetoキャラクターを引数として受け付けなくなったため、新しく修正された関数を使用してください。public DownloadThumbnail($complete: System.Action):void 代わりに。
1) 階層 > UI > キャンバスを追加し、他のUIに隠れないようにソート順を2に設定します。
2) 階層を追加 > UI > ボタン。
1) 階層を追加 > 空のオブジェクトを作成し、PanelParentと名前を変更します。
2) 階層を追加 > UI > PanelをPanelParentの子として追加します。
3) 閉じるボタン: UI > ボタンを追加した後、ジェスチャーパネルを無効にするonClickイベントを追加します。
4) 開くボタン: 上記で作成した開くボタンに、ジェスチャーパネルをアクティブにするonClickイベントを追加してください。
5) タイトルエリアとして画像を追加します。
6) ジェスチャーサムネイルを表示するためにスクロールビューを設定します。
- 階層を追加 > UI > スクロールビュー。
- 横方向をチェックし、スクロールバー画像を無効にします。縦方向のスクロールのみを使用し、横方向のスクロールは必要ありません。
- スクロールビューのコンテンツにグリッドレイアウトを追加して、サムネイルをグリッドパターンで整列させます。
- オブジェクトのサイズをコンテンツのサイズに適切にするために、コンテンツサイズフィッターを追加します。
- スクリプトを実装する際は、スクロールビューのコンテンツをジェスチャーサムネイルの親として設定する必要があります(全体の領域が認識され、スクロールされるように)。
7) ジェスチャータイプによってタブを設定します。
- 階層を追加 > パネルの子として空のオブジェクトを作成し、それをGestureTitleに名前変更します。
- これはトグルボタンの親オブジェクトです。
- タブを水平に整列させるために水平レイアウトを追加します。
- トグルグループコンポーネントを追加します。
👍 タブをさらに構成するには、階層を追加 > UI > スクロールビューを追加し、スクロールビューオプションで水平をチェックします。
8) トグルボタンとして使用するテキストをGestureTitleの子として追加し、それを「すべて」に置き換えます。
- テキストの色を灰色に設定します。
- チェックされたときに表示されるハイライトされたテキストをテキストの子として追加します。
- フォントの内容、サイズ、太さを同じに設定し、色を黒に設定します。
- トグルコンポーネントを追加します。
- グループ内の親オブジェクトを指定します。
- Graphicの子として追加したハイライトされたテキストを追加します。
- 最初に表示されるすべてのトグルコンポーネントについてのみisOnをチェックします。
- GestureとPoseのトグルボタンを同じ方法で作成します。
サムネイルボタンをプレハブとして作成し、スクリプト内でインスタンスとして生成する方法を使用します。
1) Scroll ViewのContentの子としてUI > Buttonを追加し、名前をpreThumbに変更します。
2) Raw Imageを追加した後、名前をThumbに変更してください。
- この画像はサムネイルになります。サイズを適切に調整してください。
3) テキストを追加します。
- 画像の下部を中央に配置します。
- 文字のサイズと太さを調整し、Content Size Fitterを追加します。
- 横のフィット : 推奨サイズ
- 縦のフィット : 推奨サイズ
4) 設定が完了したら、プレハブにしてResourcesフォルダに入れてください。
👍 動画に表示されているUIのサイズと位置の値は推奨ですが、希望する値に変更できます!
UI設定が完了したら、スクリプティングに進んでください。
このスクリプトはシングルプレイに基づいています。
- プロジェクト > 作成 > ZEPETO > TypeScript としてサムネイルに名前を変更します。
- 以下のようなサンプルスクリプトを書きます。
- これは、ジェスチャーコンテンツ情報(タイトル、画像)を UI に整理するスクリプトです。
- スクリプトを作成した後、preThumb プレハブを開いてスクリプトを追加します。
- 階層を作成 > 空のオブジェクトを作成し、GestureLoaderに名前を変更します。
- プロジェクトを作成 > 作成 > ZEPETO > TypeScriptを作成し、GestureLoaderに名前を変更します。
- 以下のようなサンプルスクリプトを書きます。
- カウントは、各タブでダウンロードする最大のジェスチャーの数です。100より大きい数に設定すると、サムネイルのダウンロードプロセス中にエラーが発生する可能性があるため、必要な分だけ設定してください。
スクリプトは次のように進行します:
1) ZEPETOキャラクターを読み込んだ後、サムネイルを生成するためにContentsRequest()カスタム関数を呼び出します。
- ContentsRequest()関数は、ジェスチャーとポーズをそれぞれ分けてコンテンツ情報を受け取ります。
- 既存のサムネイルがある場合はスキップされ、そうでない場合はサムネイルが取得されます。
- 取得したサムネイルデータは、それぞれのリストに保存されます。
- 階層を作成 > 空のオブジェクトを作成し、UIContollerに名前を変更します。
- プロジェクトを作成 > 作成 > ZEPETO > TypeScriptを作成し、UIContollerに名前を変更します。
- 以下のようなサンプルスクリプトを書きます。
スクリプトの流れは次のとおりです:
- タッチパッドまたは閉じるボタンをタッチして、CancelGesture()関数を使用して再生をキャンセルします。
- タブ(トグルボタン)をタップして、SetCategoryUI()カスタム関数を呼び出します。
- SetCategoryUI()関数は、各サムネイルのジェスチャーコンテンツ情報を使用して、それぞれの対応するカテゴリに設定します。
- 適用可能なタイプであれば有効にし、そうでなければ無効にします。
スクリプトを完了したら、インスペクターに「Close Button」と「TypeToggleGroup」を割り当てます。
- Type Toggle Groupへのエントリーは、ジェスチャーパネル内のToggle Groupの子であるToggleです。
❗️ 注意 プレイする前に、PanelParentを無効にして、プレイ中にオープンボタンだけが表示されるようにしてください。
- マルチプレイの場合、特定のプレイヤーが取得したジェスチャー情報値を受信し、ルームにアクセスするすべてのプレイヤーに適用する同期コードを追加する必要があります。
- 重要なのは、どのプレイヤーがどのジェスチャーを行ったかについて、サーバーとクライアント間でルームメッセージを送受信することです。
- シングルプレイのクライアントコードで実装されたのと同じスクリプトを書いてください。
- デフォルトでは、シングルプレイのクライアントコードで実装されたスクリプトは同じように書かれています。
- さらに、クライアントはPlayerGestureInfoを含むインターフェースを宣言します。
- サーバーに情報を送信する際:SendMyGesture()カスタム関数を参照してください。
- プレイヤーがサムネイルを押してジェスチャーを作成するとき、ジェスチャーIDをサーバーに送信します room.Send() を使用します。
- ジェスチャーをキャンセルするときは、キャンセルしたことを送信するために処理します。
- サーバーから別のクライアントからジェスチャー情報を受信するとき:"OnChangeGesture"ルームメッセージがこの.room.AddMessageHandler()内のStart()に送信されます。
- 同期は、"OnChangeGesture"メッセージにセッションIDとジェスチャーIDを持たせ、適切なプレイヤーがジェスチャーを実行することで達成されます。
- スクリプトの作成が完了した後、インスペクターはZepeto World Multiplayコンポーネントを使用してMultiplayに追加のオブジェクトを割り当てます。
- デフォルトでは、シングルプレイクライアントコードで実装されたスクリプトは同じように書かれています。
- シングルプレイクライアントコードとの違いは、StopGesture()カスタム関数です。
- GestureLoaderMultiplay内でSendMyGesture()カスタム関数を呼び出します。
- ジェスチャーがキャンセルされたことを通知する情報を送信するプロセス。
- サーバーコードは、PlayerGestureInfoを含むインターフェースを同様に宣言します。
- サーバーコードは、デフォルトでMultiplay Sampleのサーバーコードに基づいています。
- onCreate()内でジェスチャーが変更されると、他のクライアントにジェスチャー情報を送信するonMessage()コールバックを作成します。