キャラクターを追従するオブジェクトの実装
NavMeshAgentコンポーネントを使用すると、ZEPETOキャラクターについてくるAIオブジェクトを作成できます。
このガイドでは、自分のキャラクターについてくるPet型のオブジェクトを作成します。
Petオブジェクトの作成
Navigation (Obsolete) ウィンドウを開きます。

Unityの上部メニューで Window > AI > Navigation (Obsolete) をクリックして、Navigation (Obsolete) ウィンドウを開いてください。
Petオブジェクトが移動可能な領域を定義します。

Navigation (Obsolete) ウィンドウで Object タブをクリックします。Hierarchyから床、壁、障害物などNavMeshに含めたいオブジェクトを選択して追加してください。
- これにより、Petオブジェクトがそれらを移動可能な表面や障害物として認識できるようになります。
Navigation Staticフィールドにチェックが入っていることを確認してください。
✏️ NavMeshの詳細は以下の動画をご覧ください。
NavMeshを作成します。

Bakeタブをクリックし、下部のBakeボタンを押してNavMeshを作成します。
NavMeshAgentを追加します。
HierarchyでPetオブジェクトを選択し、InspectorでNavMeshAgentコンポーネントを追加してください。
- ここでのAgentは、NavMeshナビゲーションシステムを使って移動するPetオブジェクトを指します。
Agentのプロパティを調整すると、Petのサイズ、移動速度、回転速度、加速度、障害物と認識する高さなどを設定できます。
✏️ NavMeshAgentの詳細については、以下のリンクをご覧ください。

この例では、NavMeshAgentのStopping Distanceを3に設定し、Petがプレイヤーから3の距離で停止するようにしています。
PetControllerスクリプトを作成します。
Projectビューで + ボタン > ZEPETO > TypeScript をクリックして新しいスクリプトを作成し、PetControllerに名前を変更します。
スクリプトを開いて、下記のコードをコピー&ペーストしてください。
import { Transform } from 'UnityEngine';
import { NavMeshAgent } from 'UnityEngine.AI';
import { ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { WorldService } from 'ZEPETO.World';
export default class PetController extends ZepetoScriptBehaviour {
private _target: Transform;
private _navMeshAgent: NavMeshAgent;
Start() {
this._navMeshAgent = this.GetComponent<NavMeshAgent>();
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
this._target = ZepetoPlayers.instance.GetPlayer(WorldService.userId).character.transform;
})
}
Update() {
if (this._target == null) {
return;
}
this._navMeshAgent.SetDestination(this._target.position);
}
}スクリプトの説明
- スクリプトが開始されると、_targetに自分のZEPETOキャラクターが設定されます。
- Update関数では毎フレーム、NavMeshAgentのSetDestination関数を使ってキャラクターの位置を目的地に設定します。
PetControllerスクリプトをPetオブジェクトに適用します。
HierarchyでPetオブジェクトを選択し、InspectorでAdd Component > Zepeto Scriptをクリックします。
Scriptフィールドに作成したPetControllerスクリプトをドラッグ&ドロップしてください。
再生ボタンを押します。

Petオブジェクトがキャラクターについてきて、壁などの障害物を避けながら移動する様子が確認できます。
キャラクターの頭上にPetを乗せる
Petをキャラクターに追従させるのではなく、キャラクターの体に固定したい場合は、オブジェクトのアタッチ機能を使ってみてください。
✏️ オブジェクトの添付の詳細については、ZEPETOキャラクターにオブジェクトを取り付ける ガイドを参照してください
AttachPetControllerスクリプトを作成します。
Projectビューで + ボタン > ZEPETO > TypeScript をクリックして新しいスクリプトを作成し、AttachPetControllerに名前を変更します。
スクリプトを開いて、下記のコードをコピー&ペーストしてください。
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { ZepetoCharacter, ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { Transform, Animator, GameObject, HumanBodyBones, Object } from 'UnityEngine';
export default class AttachPetController extends ZepetoScriptBehaviour {
public Pet: GameObject;
public bodyBone: HumanBodyBones;
Start() {
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
const localCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
const animator: Animator = localCharacter.ZepetoAnimator;
const bone: Transform = animator.GetBoneTransform(this.bodyBone);
Object.Instantiate(this.Pet, bone) as GameObject;
});
}
}スクリプトの説明
- スクリプトが開始されると、ローカルプレイヤーとそのAnimatorを取得します。
- bodyBoneで選択した体の部位をAnimatorから取得し、その位置にPetオブジェクトを生成(Instantiate)します。
- このとき、Petオブジェクトのparentには取得した体の部位が指定されます。
AttachPetControllerスクリプトを新しいオブジェクトに適用します。
Hierarchyで + ボタン > Create Empty をクリックして新しいオブジェクトを作成し、AttachPetControllerという名前をつけます。
Inspectorで Add Component > Zepeto Script をクリックし、ScriptフィールドにAttachPetControllerスクリプトをドラッグ&ドロップします。
Petフィールドに使用するPetオブジェクトをドラッグし、bodyBoneフィールドのドロップダウンから取り付けたい体の部位を選択します。

再生ボタンを押すと、Petオブジェクトが指定した体の部位に生成されていることが確認できます。