CREATE YOUR WORLD
Players & Characters : Advance...

Side View Example

5min
이것은 사이드 뷰 컨트롤 설정의 예입니다 1단계 카메라 뷰 설정 카메라를 사이드 뷰로 설정합니다 (이것은 예시이므로, 프로젝트에 맞게 카메라 설정을 수정해 주세요 ) 이 시점에서 카메라의 태그는 maincamara로 설정되어야 합니다 2단계 inputaction 설정 사이드 뷰에 맞는 새로운 inputaction을 정의함으로써, 터치 스크린을 통해 캐릭터의 움직임을 제어할 수 있습니다 create > input actions를 선택하고 파일 이름을 sideview actions로 지정합니다 이동 액션 유형 통과 이동 트리거 액션 유형 버튼 계층 구조 만들기 > 빈 객체 만들기를 선택하고 이름을 sideview controller로 변경합니다 sideviewcontroller 객체에서 구성 요소 추가를 선택하고 플레이어 입력을 추가합니다 방금 생성한 sideview actions를 actions 목록에 드래그하여 연결하세요 behavoir를 unity events를 호출하도록 변경하세요 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; } } }); //zepeto 카메라 끄기 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(); //좌우 var optmovedir = new vector3(movedir x, 0, 0); optmovedir = vector3 op multiply(optmovedir, time deltatime 80 ); this mycharacter move(camrot optmovedir); } } } } //zepeto 캐릭터 따라가기 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; } } 카메라를 실행하기 전에 검사기에서 설정해 주세요