あなたの世界を作りなさい
プレイヤーとキャラクター: 上級
クォータービューの例
4 分
zepetoキャラクターのコントロールは、v padの代わりにunityの新しい入力システムを使用するようにカスタマイズできます。 これらはクォータービューコントロールの設定の例です。 ステップ1:カメラビュー設定 カメラをクォータービューに設定します(これは例ですので、プロジェクトに応じてカメラ設定を変更してください)。 この時点で、カメラのタグはmaincameraに設定されている必要があります。 ステップ2:inputaction設定 クォータービューのために新しいinputactionを定義することで、タッチスクリーンを通じてキャラクターの動きを制御できます。 作成 > 入力アクションを選択し、ファイル名をquarterviewactionsに設定します。 移動 アクションタイプ:パススルー 移動トリガー アクションタイプ:ボタン 階層 > 空のオブジェクトを作成した後、ファイル名をquarterviewcontrollerに変更します。 quarterviewcontrollerオブジェクトから、コンポーネントを追加を選択し、プレイヤー入力を追加します。 作成したquarterviewアクションをドラッグして、アクションリストに接続します。 動作をunityイベントを呼び出すように変更します。 ステップ 3 スクリプティング タッチスクリーン入力を通じてキャラクターの動きの方向を計算するスクリプトを書いてください。 作成 > zepeto > typescriptを選択し、quarterview controllerに名前を変更します。 スクリプトをquarterview controllerオブジェクトに追加します。 import {zepetoscriptbehaviour} from 'zepeto script' import {playerinput,inputaction} from "unityengine inputsystem" import {callbackcontext} from "unityengine inputsystem inputaction" import {characterstate, zepetocharacter, zepetoplayers, zepetocamera} from 'zepeto character controller' import {camera, quaternion, time, vector2, vector3, waitforendofframe} from "unityengine"; export default class quarterviewcontroller extends zepetoscriptbehaviour { private mycharacter zepetocharacter; private startpos vector2 = vector2 zero; private curpos vector2 = vector2 zero; private playerinput playerinput; private touchpositionaction inputaction; private touchtriggeraction inputaction; private istriggered boolean = false; private istouchdown boolean = false; private canmove() boolean { return this istouchdown && !this istriggered; } onenable(){ this playerinput = this gameobject getcomponent\<playerinput>(); } start() { this touchtriggeraction = this playerinput actions findaction("movetrigger"); this touchpositionaction = this playerinput actions findaction("move"); this touchtriggeraction add started((context)=>{ this istriggered = true; this istouchdown = true; }); this touchtriggeraction add canceled((context)=>{ this istriggered = false; this istouchdown = false; }); this touchpositionaction add performed((context)=>{ if(this istouchdown) { this curpos = context readvalueasobject() as vector2; if(this istriggered) { this istriggered = false; this startpos = this curpos; } } }); zepetoplayers instance onaddedlocalplayer addlistener(() => { zepetoplayers instance localplayer zepetocamera gameobject setactive(false); this mycharacter = zepetoplayers instance localplayer zepetoplayer character; this startcoroutine(this inputcontrolloop()); }); } private inputcontrolloop(){ while(true) { yield new waitforendofframe(); if (this mycharacter && this canmove()) { var camrot = quaternion euler(0, camera main transform rotation eulerangles y, 0); var movedir = vector2 op subtraction(this curpos, this startpos); movedir = vector2 op division(movedir, 100); if (movedir magnitude > 0) { if(movedir magnitude > 1) movedir normalize(); var optmovedir = new vector3(movedir x, 0, movedir y); optmovedir = vector3 op multiply(optmovedir, time deltatime 80 ); this mycharacter move(camrot optmovedir); } } } } }