あなたの世界を作りなさい

ジェスチャー

31min

ZepetoWorldContent APIを使用すると、希望するジェスチャー/ポーズカテゴリのサムネイルを設定し、サムネイルがクリックされたときに特定のジェスチャー/ポーズを有効にすることができます。

Document image




ZepetoWorldContent APIを使用するには、次のようにインポート文を書く必要があります。

TypeScript




ジェスチャー/ポーズ情報を含む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を設定する



ステップ 1-1 : ジェスチャーボタンを作成する

1) 階層 > UI > キャンバスを追加し、他のUIに隠れないようにソート順を2に設定します。

Document image




2) 階層を追加 > UI > ボタン。

例のジェスチャーボタン
例のジェスチャーボタン




ステップ 1-2 : ジェスチャーパネルを整理する

1) 階層を追加 > 空のオブジェクトを作成し、PanelParentと名前を変更します。

Document image




2) 階層を追加 > UI > PanelをPanelParentの子として追加します。

例のジェスチャーパネル
例のジェスチャーパネル




3) 閉じるボタン: UI > ボタンを追加した後、ジェスチャーパネルを無効にするonClickイベントを追加します。

閉じるボタンの設定例
閉じるボタンの設定例




4) 開くボタン: 上記で作成した開くボタンに、ジェスチャーパネルをアクティブにするonClickイベントを追加してください。

開くボタンの設定例
開くボタンの設定例




5) タイトルエリアとして画像を追加します。

タイトル画像の例
タイトル画像の例




6) ジェスチャーサムネイルを表示するためにスクロールビューを設定します。

  • 階層を追加 > UI > スクロールビュー。
  • 横方向をチェックし、スクロールバー画像を無効にします。縦方向のスクロールのみを使用し、横方向のスクロールは必要ありません。
  • スクロールビューのコンテンツにグリッドレイアウトを追加して、サムネイルをグリッドパターンで整列させます。
  • オブジェクトのサイズをコンテンツのサイズに適切にするために、コンテンツサイズフィッターを追加します。
  • スクリプトを実装する際は、スクロールビューのコンテンツをジェスチャーサムネイルの親として設定する必要があります(全体の領域が認識され、スクロールされるように)。
スクロールビュー設定の例
スクロールビュー設定の例




7) ジェスチャータイプによってタブを設定します。

  • 階層を追加 > パネルの子として空のオブジェクトを作成し、それをGestureTitleに名前変更します。
    • これはトグルボタンの親オブジェクトです。
    • タブを水平に整列させるために水平レイアウトを追加します。
    • トグルグループコンポーネントを追加します。

👍 タブをさらに構成するには、階層を追加 > UI > スクロールビューを追加し、スクロールビューオプションで水平をチェックします。

GestureTitleの設定例
GestureTitleの設定例




8) トグルボタンとして使用するテキストをGestureTitleの子として追加し、それを「すべて」に置き換えます。

  • テキストの色を灰色に設定します。
  • チェックされたときに表示されるハイライトされたテキストをテキストの子として追加します。
    • フォントの内容、サイズ、太さを同じに設定し、色を黒に設定します。
  • トグルコンポーネントを追加します。
    • グループ内の親オブジェクトを指定します。
    • Graphicの子として追加したハイライトされたテキストを追加します。
    • 最初に表示されるすべてのトグルコンポーネントについてのみisOnをチェックします。
  • GestureとPoseのトグルボタンを同じ方法で作成します。
トグルボタンの設定の例
トグルボタンの設定の例




ステップ 1-3 : サムネイルプレハブを作成する

サムネイルボタンをプレハブとして作成し、スクリプト内でインスタンスとして生成する方法を使用します。

1) Scroll ViewのContentの子としてUI > Buttonを追加し、名前をpreThumbに変更します。

2) Raw Imageを追加した後、名前をThumbに変更してください。

  • この画像はサムネイルになります。サイズを適切に調整してください。

3) テキストを追加します。

  • 画像の下部を中央に配置します。
  • 文字のサイズと太さを調整し、Content Size Fitterを追加します。
    • 横のフィット : 推奨サイズ
    • 縦のフィット : 推奨サイズ

4) 設定が完了したら、プレハブにしてResourcesフォルダに入れてください。

サムネイルプレハブ設定の例
サムネイルプレハブ設定の例

実行後にジェスチャーパネルにサムネイルボタンが設定される例
実行後にジェスチャーパネルにサムネイルボタンが設定される例




ステップ 1-4 : UI設定ガイド動画



👍 動画に表示されているUIのサイズと位置の値は推奨ですが、希望する値に変更できます!

UI設定が完了したら、スクリプティングに進んでください。



ステップ 2 : スクリプトを書く

このスクリプトはシングルプレイに基づいています。



ステップ 2-1 : サムネイル

  • プロジェクト > 作成 > ZEPETO > TypeScript としてサムネイルに名前を変更します。
  • 以下のようなサンプルスクリプトを書きます。
    • これは、ジェスチャーコンテンツ情報(タイトル、画像)を UI に整理するスクリプトです。
サムネイル

  • スクリプトを作成した後、preThumb プレハブを開いてスクリプトを追加します。
Document image




ステップ 2-2 : GestureLoader

  • 階層を作成 > 空のオブジェクトを作成し、GestureLoaderに名前を変更します。
  • プロジェクトを作成 > 作成 > ZEPETO > TypeScriptを作成し、GestureLoaderに名前を変更します。
  • 以下のようなサンプルスクリプトを書きます。
GestureLoader

  • カウントは、各タブでダウンロードする最大のジェスチャーの数です。100より大きい数に設定すると、サムネイルのダウンロードプロセス中にエラーが発生する可能性があるため、必要な分だけ設定してください。



スクリプトは次のように進行します:

1) ZEPETOキャラクターを読み込んだ後、サムネイルを生成するためにContentsRequest()カスタム関数を呼び出します。

  • ContentsRequest()関数は、ジェスチャーとポーズをそれぞれ分けてコンテンツ情報を受け取ります。
    • 既存のサムネイルがある場合はスキップされ、そうでない場合はサムネイルが取得されます。
    • 取得したサムネイルデータは、それぞれのリストに保存されます。
ジェスチャースクリプト設定画面の例
ジェスチャースクリプト設定画面の例




ステップ 2-3 : UIController

  • 階層を作成 > 空のオブジェクトを作成し、UIContollerに名前を変更します。
  • プロジェクトを作成 > 作成 > ZEPETO > TypeScriptを作成し、UIContollerに名前を変更します。
  • 以下のようなサンプルスクリプトを書きます。
UIController


スクリプトの流れは次のとおりです:

  1. タッチパッドまたは閉じるボタンをタッチして、CancelGesture()関数を使用して再生をキャンセルします。
  2. タブ(トグルボタン)をタップして、SetCategoryUI()カスタム関数を呼び出します。
  3. SetCategoryUI()関数は、各サムネイルのジェスチャーコンテンツ情報を使用して、それぞれの対応するカテゴリに設定します。
  • 適用可能なタイプであれば有効にし、そうでなければ無効にします。



スクリプトを完了したら、インスペクターに「Close Button」と「TypeToggleGroup」を割り当てます。

  • Type Toggle Groupへのエントリーは、ジェスチャーパネル内のToggle Groupの子であるToggleです。
例のスクリプト設定画面
例のスクリプト設定画面




ステップ 3 : 実行

❗️ 注意 プレイする前に、PanelParentを無効にして、プレイ中にオープンボタンだけが表示されるようにしてください。

Document image




ステップ 4 : マルチプレイジェスチャーの同期

  • マルチプレイの場合、特定のプレイヤーが取得したジェスチャー情報値を受信し、ルームにアクセスするすべてのプレイヤーに適用する同期コードを追加する必要があります。
  • 重要なのは、どのプレイヤーがどのジェスチャーを行ったかについて、サーバーとクライアント間でルームメッセージを送受信することです。



ステップ 4-1 : クライアントコード

サムネイル - マルチプレイ

  • シングルプレイのクライアントコードで実装されたのと同じスクリプトを書いてください。
サムネイル - マルチプレイ




GestureLoader - マルチプレイ

  • デフォルトでは、シングルプレイのクライアントコードで実装されたスクリプトは同じように書かれています。
  • さらに、クライアントはPlayerGestureInfoを含むインターフェースを宣言します。
  • サーバーに情報を送信する際:SendMyGesture()カスタム関数を参照してください。
    • プレイヤーがサムネイルを押してジェスチャーを作成するとき、ジェスチャーIDをサーバーに送信します room.Send() を使用します。
    • ジェスチャーをキャンセルするときは、キャンセルしたことを送信するために処理します。
  • サーバーから別のクライアントからジェスチャー情報を受信するとき:"OnChangeGesture"ルームメッセージがこの.room.AddMessageHandler()内のStart()に送信されます。
    • 同期は、"OnChangeGesture"メッセージにセッションIDとジェスチャーIDを持たせ、適切なプレイヤーがジェスチャーを実行することで達成されます。
TypeScript




  • スクリプトの作成が完了した後、インスペクターはZepeto World Multiplayコンポーネントを使用してMultiplayに追加のオブジェクトを割り当てます。



スクリプト設定画面の例
スクリプト設定画面の例

Zepeto World Multiplayコンポーネントを持つオブジェクトの例
Zepeto World Multiplayコンポーネントを持つオブジェクトの例




UIController - マルチプレイ

  • デフォルトでは、シングルプレイクライアントコードで実装されたスクリプトは同じように書かれています。
  • シングルプレイクライアントコードとの違いは、StopGesture()カスタム関数です。
    • GestureLoaderMultiplay内でSendMyGesture()カスタム関数を呼び出します。
    • ジェスチャーがキャンセルされたことを通知する情報を送信するプロセス。
TypeScript




ステップ 4-2 : サーバーコード

  • サーバーコードは、PlayerGestureInfoを含むインターフェースを同様に宣言します。
    • サーバーコードは、デフォルトでMultiplay Sampleのサーバーコードに基づいています。
  • onCreate()内でジェスチャーが変更されると、他のクライアントにジェスチャー情報を送信するonMessage()コールバックを作成します。
TypeScript