あなたの世界を作りなさい
オブジェクトとの相互作用
キャラクターを追従するオブジェクトの実装
3分
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キャラクターにオブジェクトを取り付ける docid 3bs1kblctl2wpppah2 ws ガイドを参照してください 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オブジェクトが指定した体の部位に生成されていることが確認できます。