あなたの世界を作りなさい
プレイヤーとキャラクター: 上級
サイドビューの例
4 分
これはサイドビューコントロールの設定例です。 ステップ 1 カメラビュー設定 カメラをサイドビューに設定します。(これは例ですので、プロジェクトに応じてカメラ設定を変更してください。) この時点で、カメラのタグはmaincameraに設定されている必要があります。 ステップ 2 inputaction設定 サイドビューに合った新しいinputactionを定義することで、タッチスクリーンを通じてキャラクターの動きを制御できます。 作成 > input actionsを選択し、ファイル名をsideview actionsにします。 移動 アクションタイプ 通過 移動トリガー アクションタイプ ボタン 階層を作成 > 空のオブジェクトを作成し、名前をsideview controllerに変更します。 sideviewcontrollerオブジェクトから、コンポーネントを追加を選択し、player inputを追加します。 作成したsideviewアクションをアクションリストにドラッグして接続します。 動作をunityイベントを呼び出すように変更します。 ステップ 3 スクリプティング zepetoキャラクターを左右に移動させ、カメラが追従するスクリプトを作成します。 作成 > zepeto > typescript を選択し、sideview controller に名前を変更します。 スクリプトを sideviewcontroller オブジェクトに追加します。 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 sideviewcontroller extends zepetoscriptbehaviour { public customcamera camera; public cameradistance number = 10; private originspawnpoint vector3 = new vector3( 16, 5,0); 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; } } }); //turn off zepeto camera zepetoplayers instance onaddedlocalplayer addlistener(() => { zepetoplayers instance localplayer zepetocamera gameobject setactive(false); this mycharacter = zepetoplayers instance localplayer zepetoplayer character; this customcamera transform position = this mycharacter transform position + this originspawnpoint; 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(); //left right var optmovedir = new vector3(movedir x, 0, 0); optmovedir = vector3 op multiply(optmovedir, time deltatime 80 ); this mycharacter move(camrot optmovedir); } } } } //follow zepeto character lateupdate() { if(null == this mycharacter) { return; } let characterpos = this mycharacter transform position; //let cameraposition = new vector3(characterpos x this cameradistance, this customcamera transform position y, characterpos z); let cameraposition = new vector3(characterpos x this cameradistance, characterpos y + 1, characterpos z); this customcamera transform position = cameraposition; } } 実行する前にインスペクターでカメラを設定してください。