CREATE YOUR WORLD
Players & Characters : Advance...
Quarter View Example
4min
zepeto 캐릭터 컨트롤은 v pad 대신 unity의 새로운 입력 시스템을 사용하도록 사용자 정의할 수 있습니다 이것은 쿼터 뷰 컨트롤 설정의 예입니다 1단계 카메라 뷰 설정 카메라를 쿼터 뷰로 설정합니다 (이것은 예시이므로, 프로젝트에 맞게 카메라 설정을 수정해 주세요) 이 시점에서 카메라의 태그는 maincamera로 설정되어야 합니다 2단계 inputaction 설정 쿼터 뷰에 대한 새로운 inputaction을 정의함으로써, 터치 스크린을 통해 캐릭터의 움직임을 제어할 수 있습니다 create > input actions를 선택하고 파일 이름을 quarterviewactions로 설정합니다 이동 액션 유형 통과 이동 트리거 액션 유형 버튼 계층 구조 > 빈 객체 만들기 후, 파일 이름을 quarterviewcontroller로 변경합니다 quarterviewcontroller 객체에서 구성 요소 추가를 선택하고 플레이어 입력을 추가합니다 방금 생성한 quarterview 작업을 작업 목록에 드래그하여 연결합니다 동작을 unity 이벤트 호출로 변경합니다 3단계 스크립팅 터치 스크린 입력을 통해 캐릭터의 움직임 방향을 계산하는 스크립트를 작성하세요 create > 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); } } } } }