NPCを作成
ZEPETOキャラクターからNPCを作成する方法を学びましょう。
各機能に提供されているサンプルスクリプトを適用して、あなたのワールドに選択したNPCを追加します。
ZEPETO IDを使用してNPCを作成します。

- NPCの外見と着用するアイテムは、入力されたZEPETO IDと同じになります。
- NPCを作成する前に、特定の外見を持つZEPETOキャラクターを設定することをお勧めします。
- シーンにZEPETOキャラクター作成コードをデフォルトで実装します。
📘 次のガイドを参照してください。[ZEPETOキャラクターを作成する]
- 階層を作成 > 空のオブジェクトを作成し、NPCに名前を変更します。
- NPCが作成される場所を保存するオブジェクト。
- 位置と回転を設定します。

1) プロジェクトを作成 > 作成 > ZEPETO > TypeScript とし、NPCCreatorに名前を変更します。
2) 以下のようなサンプルスクリプトを書きます。
スクリプトの流れは次のとおりです:
- Start()
- ZepetoCharacterCreator.CreateByZepetoId()関数を使用してNPCオブジェクトの位置にNPCを作成し、それを_npcに保存します。
3) スクリプトの記述が完了したら、NPCオブジェクトにスクリプトを追加します。
4) インスペクターでZepeto IDを割り当てます。
- Zepeto ID : NPCのZEPETO ID。

5) 実行するために再生ボタンを押すと、NPCが作成されます。
6) 同様にNPCの位置オブジェクトを追加し、複数のNPCを簡単に作成するためのNPCスクリプトを追加します。

プレイヤーと区別するために、名前タグでNPCにラベルを付けることができます。

1) 階層 > UI > キャンバスを作成し、PrefNameTagCanvasに名前を変更します。
- レンダーモードをワールドスペースに設定します。

2) PrefNameTagCanvasの子として階層 > UI > テキストを作成し、NameTagTextに名前を変更します。
- 名前を表すテキスト。
- テキストを適切なサイズにするために、コンテンツサイズフィッターコンポーネントを追加します。

3) 完了したら、プロジェクトウィンドウにドラッグしてプレハブにし、ハイライターにまだ残っているPrefNameTagCanvasを削除します。

1) プロジェクトを作成 > 作成 > ZEPETO > TypeScript とし、NPCCreatorWithNameTagに名前を変更します。
2) 以下のようにサンプルスクリプトを書きます。
スクリプトの流れは次のとおりです:
- 開始する()
- SetNameTag() カスタム関数を呼び出します。
- SetNameTag()
- NPCのために動的に名前タグを生成し、生成された名前タグをNPCの頭上に調整します。
- 名前タグの中のテキストを設定します。
- 更新する()
- UpdateCanvasRotation() カスタム関数を呼び出して、カメラに合わせてキャンバスを回転させます。
3) スクリプトの記述が完了したら、NPCオブジェクトに追加します。
4) インスペクターで、Zepeto Id、名前タグ、名前タグプレハブ、および名前タグYオフセットを割り当てます。
- 名前タグ: NPCの名前タグに表示される名前。
- 名前タグプレハブ: 名前タグキャンバスのプレハブ。
- 名前タグYオフセット: 名前タグキャンバスオブジェクトのy軸オフセット値を格納する変数。キャラクターの頭上に名前タグを配置する際に、キャラクターと名前タグの間の距離を調整できます。

5) 再生ボタンを押して実行すると、名前タグを持つNPCが作成されます。

NPCの行動を制御できます。

ZEPETOキャラクターAPIを使用してNPCをジャンプさせます。
ZEPETOキャラクターAPIを使用して、より広範な動作を実装できます。
📘 以下のガイドを参照してください。[ZEPETOキャラクター]
1) プロジェクト > 作成 > ZEPETO > TypeScriptを作成し、NPCJumpに名前を変更します。
2) 以下のようにサンプルスクリプトを書きます。
スクリプトの流れは次のとおりです:
- 開始()
- JumpCoroutine()コルーチンを呼び出します。
- JumpCoroutine()
- NPCキャラクターが5秒ごとにジャンプするようにJump()メソッドを呼び出します。
3) スクリプトの記述が完了したら、スクリプトをNPCオブジェクトに追加します。
4) 再生ボタンを押すと、NPCがジャンプします。

NPCのためにジェスチャーを実装するには、アニメーターコントローラーを使用します。
アニメーターコントローラーを使用すると、より多様な動作を実装できます。
📘 Unityアニメーターコントローラー https://docs.unity3d.com/Manual/class-AnimatorController.html
- 以下のガイドを使用して、NPCが実行するためのジェスチャーアニメーションクリップを準備します。
📘 以下のガイドを参照してください。
1) プロジェクト > 作成 > アニメーターコントローラーを作成し、NPCAnimatorControllerに名前を変更します。

2) アニメータータブで、状態を作成 > 空の状態。

3) インスペクターで適切に名前を変更し、アニメーションクリップをモーションに割り当てます。

1) プロジェクトを作成 > 作成 > ZEPETO > TypeScript として名前を NPCGesture に変更します。
2) 以下のようにサンプルスクリプトを書きます。
スクリプトの流れは次のとおりです:
- Start()
- NPCオブジェクトのAnimatorコンポーネントを取得し、npcAnimator変数で指定されたAnimator Controllerに設定します。
3) スクリプトの記述が終わったら、NPCが作成されるLocationオブジェクトに追加します。
4) インスペクターで、Zepeto Id、Npc Animatorを割り当てます。
- Npc Animator: NPCのアニメーションコントローラー。

5) 再生ボタンを押して実行すると、NPCがジェスチャーをするのが見えます。
6) ジェスチャーやジャンプ以外のアクションを行うNPCを作成するためにこれを適用できます。
NPCの頭の上にキャンバスを作成し、画像やテキストを表示してバブルにすることができます。

1) 階層 > UI > キャンバスを作成し、名前をPrefSpeechBubbleCanvasに変更します。
- レンダーモードをワールドスペースに設定します。

2) PrefSpeechBubbleCanvasの子として階層 > UI > 画像を作成し、名前をSpeechBubbleImageに変更します。
- これはスピーチバブルの背景となる画像です。

3) 階層を作成 > UI > SpeeachBubbleImageの子としてテキストを作成し、名前をSpeeachBubbleTextに変更します。
- これはスピーチバブルの中のテキストです。
- テキストのサイズを適切にするために、Content Size Fitterコンポーネントを追加します。

4) 完了したら、プロジェクトウィンドウにドラッグしてPrefabにし、ハイライトにまだ残っているPrefSpeechBubbleCanvasを削除します。

1) プロジェクトを作成 > 作成 > ZEPETO > TypeScriptを選択し、名前をNPCSpeechBubbleに変更します。
2) 以下のようにサンプルスクリプトを書いてください。
スクリプトの流れは次のとおりです:
- 開始()
- SetBubble() カスタム関数を呼び出します。
- SetBubble()
- スピーチバブルキャンバス (speechBubblePrefab) を作成し、作成したスピーチバブルをNPCの頭の上に配置します。
- SetBubbleText() カスタム関数を呼び出して、スピーチバブル内のテキストを設定します。
- SetBubbleText()
- NPCのスピーチバブルキャンバス (_speechBubbleObject) をアクティブにします。
- スピーチバブル内にパラメータとして与えられた文字列 (bubbleText) を表示します。
- 更新()
- UpdateCanvasRotation() カスタム関数を呼び出して、キャンバスをカメラに合わせて回転させます。
3) スクリプトの記述が完了したら、NPCが作成される場所のオブジェクトに追加します。
4) インスペクターで、Zepeto Id、スピーチバブルテキスト、スピーチバブルプレハブ、スピーチバブルYオフセットを割り当てます。
- スピーチバブルテキスト: この変数は、NPCキャラクターがスピーチバブルで言うダイアログを保存します。私たちの例では、次のダイアログを保存します: "こんにちは世界"。
- スピーチバブルプレハブ: この変数は、スピーチバブルキャンバスゲームオブジェクトのプレハブを保存します。
- スピーチバブルYオフセット: この変数は、スピーチバブルキャンバスゲームオブジェクトのY軸オフセット値を保存します。これにより、キャラクターの頭上にスピーチバブルを配置する際に、キャラクターとスピーチバブルの間の距離を調整できます。

5) 再生ボタンを押して実行すると、NPCの頭上にスピーチバブルが浮かんでいるのが見えます。
NPCと対話することで、たくさんの楽しいコンテンツを実装できます。
このガイドでは、NPCに近づくと変化する吹き出しを実装する例を使用します。

1) NPCと対話するためにオブジェクトにコライダーコンポーネントを追加し、isTriggerを確認します。

2) プレイヤーがNPCと対話できる範囲にコライダーをリサイズします。

1) プロジェクトを作成 > 作成 > ZEPETO > TypeScript として名前を NPCInteraction に変更します。
2) 以下のようにサンプルスクリプトを書きます。
スクリプトの流れは次のとおりです:
- OnTriggerEnter(), OnTriggerExit()
- トリガーがコライダーエリアに入ると検出されたとき、SetBubbleText()カスタム関数を呼び出して、スピーチバブル内のテキストをchangedSpeechBubbleTextに設定します。
- コライダーエリアを離れると、SetBubbleText()カスタム関数を呼び出して、スピーチバブル内のテキストをspeechBubbleTextに設定します。
3) スクリプトの記述が完了したら、NPCが作成されるLocationオブジェクトに追加します。
4) インスペクターで、Zepeto Id、スピーチバブルテキスト、スピーチバブルプレハブ、スピーチバブルYオフセット、および変更されたスピーチバブルを割り当てます。
- スピーチバブルテキスト: この変数は、NPCキャラクターがスピーチバブルで言うダイアログを格納します。私たちの例では、次のダイアログを格納します: "こんにちは世界"。
- スピーチバブルプレハブ: この変数は、スピーチバブルキャンバスGameObjectのプレハブを格納します。
- スピーチバブルYオフセット: この変数は、スピーチバブルキャンバスGameObjectのy軸オフセット値を格納します。これにより、キャラクターの頭上にスピーチバブルを配置する際に、キャラクターとスピーチバブルの間の距離を調整できます。
- 変更されたスピーチバブル: プレイヤーがNPCのコライダーに入ると、NPCのスピーチバブルに表示されるダイアログを格納します。

5) プレイを押して実行し、プレイヤーがNPCに近づくと、吹き出しのテキストが変わります。
ダイアログ形式を作成するには、パネルを使用してUIを作成します。
以下は、パネルとボタンで構成されたシンプルなダイアログの例です。

これは、NPCとインタラクションするときにダイアログを開き、各ボタンが押されたときにそれを処理する例のスクリプトです。
これを適用して、面白いコンテンツを実装します。