あなたの世界を作りなさい
プレイヤーとキャラクター: 上級
Vパッドの使用
17 分
v pad キャラクターを世界の中で操作するためのコントロールuiが必要です。 zepeto worldは基本的に、zepetoplayersを通じて実行時にv padというコントロールuiを作成します。 v padは、プレイヤーが画面上で触れるエリアに応じて以下の機能を実行できます: 1\) スクリーンタッチパッド:パッドエリアに触れてスライドすると、ローカルプレイヤーがxz軸に沿って移動します。 パッドエリア内をタップすると、タッチパッドがタッチした位置に表示され、タッチアクションが完了すると消えます。 デフォルトのパッドエリアは次のとおりです: スクリーンモード キャンバスサイズ エリアサイズ 横向き 1334 x 750 600 x 450 縦向き 750 x 1334 375 x 500 2\) ジャンプボタン:ボタンを押すと、ローカルプレイヤーがジャンプします。ジャンプの高さはzepeto players > character > jump powerで変更できます。 👍 ヒント パッドエリアは、zepetoプレイヤーのコントロールに登録されたプレハブのエリアを設定することで変更できます。 次の順序でエリアのサイズを変更します。 コントロールのzepetoプレイヤーに登録されたデフォルトのプレハブを選択し、アセットにドラッグ&ドロップしてプレハブをコピーします。 コピーしたプレハブ内のパッドオブジェクトを選択します。 rect transformコンポーネントの幅と高さを希望のサイズに変更します。 ランタイムで作成されたv padのオブジェクト構造は次のとおりです。 1\) パッド キャラクターの位置を移動できる画面uiオブジェクト。 背景 パッドエリアを示す半透明の黒い背景画像。 ハンドルオリジン パッドの外側の円のエリア。ハンドルオリジンは、タッチされた位置に応じて位置が変わる。 ハンドル パッドの内側の円のエリア。ハンドルがタッチされてドラッグされると、その位置が変わり、ハンドルオリジンエリアを離れない。 2) ジャンプ キャラクターがジャンプできるボタンオブジェクト。 上 ジャンプボタン内のジャンプ画像オブジェクト。 v padの入力値を取得する方法 v padの入力値を受け取るには、ランタイムで作成されたzepetoscreentouchpadコンポーネントとzepetoscreenbuttonコンポーネントにアクセスし、イベントを登録する必要があります。 zepetoscreentouchpadイベント zepetoscreenbuttonコンポーネントはキャラクターのジャンプボタンコンポーネントです。アクセス可能なイベントには以下が含まれます: イベント 説明 onpointerdownevent このイベントは、ユーザーがv padを押したときに発生します。 ondragevent このイベントは、ユーザーがv padを押している間に発生します。 onpointerupevent このイベントは、ユーザーがv padを放したときに発生します。 zepetoscreenbutton イベント zepetoscreenbutton コンポーネントはキャラクターのジャンプボタンコンポーネントです。アクセス可能なイベントには以下が含まれます: イベント 説明 onpointdownevent このイベントは、ユーザーがジャンプボタンを押したときに発生します。 onpointupevent このイベントは、ユーザーがジャンプボタンを放したときに発生します。 例のスクリプト 以下のスクリプトは、ユーザーがタッチパッドを押したときにv padの位置値をコンソールに出力する例です。 getvpadinput import { object } from 'unityengine'; import { zepetoplayers, zepetoscreenbutton, zepetoscreentouchpad } from 'zepeto character controller'; import { zepetoscriptbehaviour } from 'zepeto script' export default class getvpadinput extends zepetoscriptbehaviour { start() { // ローカルプレイヤーが追加されたときのイベントリスナーを追加 zepetoplayers instance onaddedlocalplayer addlistener(() => { this getpadtouch(); this getjumptouch(); }); } getpadtouch() { // シーン内のzepetoscreentouchpadオブジェクトを見つける const touchpad = object findobjectoftype\<zepetoscreentouchpad>(); // タッチパッドのドラッグイベントにリスナーを追加 touchpad ondragevent addlistener(() => { // ドラッグイベントが発生したときのタッチハンドルの位置をログに記録 console log(touchpad touchhandle transform position); }); } getjumptouch() { // シーン内のzepetoscreenbuttonオブジェクトを見つける const screenbutton = object findobjectoftype\<zepetoscreenbutton>(); // screenbuttonのonpointdowneventにリスナーを追加 // このリスナーはボタンが押されたときに「ジャンプボタンダウン」とログに記録 screenbutton onpointdownevent addlistener(() => { console log("ジャンプボタンダウン"); }); // screenbuttonのonpointupeventにリスナーを追加 // このリスナーはボタンが放されたときに「ジャンプボタンアップ」とログに記録 screenbutton onpointupevent addlistener(() => { console log("ジャンプボタンアップ"); }); } } スクリプトの説明 ローカルプレイヤーがシーンに追加されたときに、 getpadtouch() と getjumptouch() 関数を呼び出すイベントリスナーを登録します。 この getpadtouch() 関数は、タッチパッドで発生するタッチイベントを処理する関数です。 シーン内のzepetoscreentouchpadオブジェクトを見つけるために、 object findobjectoftype\<zepetoscreentouchpad>() を使用します。 タッチパッドの ondragevent このリスナーは、タッチパッドでドラッグイベントが発生したときに発火します。 リスナー内で、タッチハンドルの位置がコンソールに出力されます。 この getjumptouch() 関数は、ジャンプボタンから発生するイベントを処理する関数です。 シーン内のzepetoscreenbuttonオブジェクトを見つけるために、 object findobjectoftype\<zepetoscreenbutton>() を使用します。 ジャンプボタンのonpointdowneventとonpointupeventのリスナーを追加します。 内で、 onpointdownevent , ジャンプボタンが押されるたびにjump button downというログが出力されます。 内で、 onpointupevent , ジャンプボタンが放されるたびにjump button upというログが出力されます。 再生ボタンを押して実行すると、v padを押すたびにコンソールログにv padの位置値が表示されます。また、ジャンプボタンを押したり離したりするたびにコンソールログが表示されます。 v pad カスタマイズ screentouchpad と screenbutton を使用して v pad を操作できます。 uicontroller touchpad horizontal と uicontroller touchpad vertical prefab から v pad をオン/オフにできます。 以下は、タッチパッドがオフになっているときの見た目です。ジャンプボタンも同じ方法でオフにできます。 ダブルジャンプ設定 v pad のジャンプボタンにダブルジャンプ機能を追加するか、カスタムダブルジャンプボタン機能を適用できます。 ダブルジャンプ機能を有効にするには、zepetoplayers コンポーネントのキャラクターセクションでカスタムパラメータ > ダブルジャンプのチェックボックスをオンにします。 ダブルジャンプの高さは、パワー値を調整することで設定できます。 vパッドでダブルジャンプ機能を使用する方法は3つあります: 1\) v pad prefabを通じて設定する v padボタンでダブルジャンプを使用する場合は、以下のように設定します。 uicontroller touchpad verticalまたはuicontroller touchpad horizontal prefabをクリックします。プロジェクトパネルのpackagesフォルダー内にある元のprefabがあるフォルダーに移動します。 uicontroller touchpad verticalまたはuicontroller touchpad horizontal prefabをドラッグ&ドロップしてassetsフォルダーにコピーします。 ❗️ 注意 packagesフォルダー内の元のprefabは変更できないため、変更するにはassetsフォルダーにコピーを作成する必要があります。 元のprefabを変更しようとすると、immutable prefabエラーが発生します。 コピーしたprefabアイテム内のuicontroller touchpad verticalまたはuicontroller touchpad horizontal prefabをダブルクリックするか、inspectorウィンドウのopen prefabボタンを押してprefabを編集します。 prefabのサブオブジェクトからjumpオブジェクトを選択します。 jumpオブジェクトのzepeto screen buttonコンポーネントで、on point down event()の+ボタンを押し、次のようにイベントを登録します。 on point down event() ランタイムのみ オブジェクトを選択 uicontroller touchpad verticalまたはuicontroller touchpad horizontalを登録します。 イベント関数 no functionセクションをクリックし、uizepetoplayercontrol > doublejump() 関数に設定します。 設定が次のようになっている場合、成功です。 2\) スクリプトを使用した設定 このスクリプトは、キャラクターがv padのジャンプボタンからの入力に応じてダブルジャンプを行うことを可能にします。 import { zepetoscriptbehaviour } from 'zepeto script'; import { object } from 'unityengine'; import { zepetoscreenbutton, characterstate, zepetoplayers } from 'zepeto character controller'; export default class dobulejump extends zepetoscriptbehaviour { start() { // ローカルプレイヤーが追加されたときにリスナーを実行する zepetoplayers instance onaddedlocalplayer addlistener(() => { // ローカルプレイヤーのキャラクターを取得 const zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; // シーン内のzepetoscreenbutton型のオブジェクトを見つける const screenbutton = object findobjectoftype\<zepetoscreenbutton>(); // ジャンプアクションを処理するためにスクリーンボタンのonpointdowneventにリスナーを追加 screenbutton onpointdownevent addlistener(() => { // キャラクターの現在の状態がjumpの場合、ダブルジャンプをトリガー if (zepetocharacter currentstate === characterstate jump) { zepetocharacter doublejump(); } }); }) } } スクリプトの説明 zepetoplayers instance onaddedlocalplayer addlistener() は、ローカルプレイヤーがゲームに追加されたときにトリガーされるリスナーを登録します。これは、ローカルプレイヤーが追加される際にダブルジャンプ機能を構成するために役立ちます。 zepetoplayers instance localplayer zepetoplayer character は、ローカルプレイヤーのキャラクターへのアクセスを提供します。 object findobjectoftype() は、現在のシーン内のzepetoscreenbutton型のオブジェクトを見つけて、ジャンプアクションに割り当てます。 screenbutton onpointdownevent addlistener() は、スクリーンボタンのonpointdowneventにリスナーを追加します。このリスナーは、スクリーンタッチまたはクリックイベントを待機し、ジャンプまたはダブルジャンプアクションを開始します。 リスナー内で、if文はキャラクターの現在の状態がcharacterstate jumpであるかどうかをチェックします。もしそうであれば、 zepetocharacter doublejump() を実行します。 スクリプトを書いた後、シーンに空のgameobjectを作成し、dobulejump tsスクリプトをコンポーネントとして追加します。 3\) カスタムボタンを通じて設定する 独自のボタンを作成して使用することを選択した場合は、以下のようにスクリプトを追加してください。 このスクリプトは、ユーザー定義のボタンにジャンプおよびダブルジャンプ機能を追加します。 import { zepetoscriptbehaviour } from 'zepeto script'; import { button } from 'unityengine ui'; import { characterstate, zepetocharacter, zepetoplayers } from 'zepeto character controller'; export default class jumpbutton extends zepetoscriptbehaviour { public shotbutton button; private zepetocharacter zepetocharacter; start() { // キャラクターを作成 zepetoplayers instance onaddedlocalplayer addlistener(() => { this zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; }); // スクリプトコンポーネントを追加 this shotbutton onclick addlistener(() => { if (this zepetocharacter currentstate === characterstate jump) { this zepetocharacter doublejump(); } else { this zepetocharacter jump(); } }); } } スクリプトの説明 zepetoplayers instance onaddedlocalplayer addlistener() ゲームにローカルプレイヤーが追加されたときに実行される関数を登録します。 this shotbutton onclick addlistener() shotbuttonがクリックされたときに実行される関数を追加します。 関数がトリガーされると、キャラクターの現在の状態がジャンプ状態であるかどうかを確認し、ジャンプまたはダブルジャンプを実行します。 キャラクターがジャンプ状態にある場合、 this zepetocharacter doublejump() が呼び出されてダブルジャンプを実行します。そうでない場合、 this zepetocharacter jump() が呼び出されてジャンプを実行します。 スクリプトを書いた後、シーンに空のgameobjectを作成し、jumpbutton tsスクリプトをコンポーネントとして追加します。 最後に、インスペクターでshot buttonにジャンプボタンを割り当てます。