สร้างโลกของคุณเอง
ผู้เล่นและตัวละคร: ขั้นสูง
ตัวอย่างมุมมองหนึ่งในสี่
4นาที
การควบคุมตัวละคร zepeto สามารถปรับแต่งให้ใช้ระบบการป้อนข้อมูลใหม่ของ unity แทน v pad นี่คือตัวอย่างการตั้งค่าการควบคุมมุมมองแบบ quarter view ขั้นตอนที่ 1 การตั้งค่ามุมมองกล้อง ตั้งค่ากล้องเป็นมุมมองแบบ quarter view (นี่คือตัวอย่าง ดังนั้นโปรดปรับการตั้งค่ากล้องตามโครงการของคุณ ) ในจุดนี้ แท็กของกล้องควรตั้งค่าเป็น maincamara ขั้นตอนที่ 2 การตั้งค่า inputaction โดยการกำหนด inputaction ใหม่สำหรับมุมมองแบบ quarter view คุณสามารถควบคุมการเคลื่อนไหวของตัวละครผ่านหน้าจอสัมผัส เลือก สร้าง > การกระทำการป้อนข้อมูล และตั้งชื่อไฟล์ว่า quarterviewactions เคลื่อนที่ ประเภทการกระทำ ผ่านเข้าไป เคลื่อนที่ trigger ประเภทการกระทำ ปุ่ม หลังจากสร้าง hierarchy > สร้างวัตถุเปล่า เปลี่ยนชื่อไฟล์เป็น quarterviewcontroller จากวัตถุ quarterviewcontroller ให้เลือก เพิ่มส่วนประกอบ และเพิ่ม player input ลากและเชื่อมต่อ quarterview actions ที่คุณเพิ่งสร้างไปยังรายการ actions เปลี่ยนพฤติกรรมเป็น invoke unity events ขั้นตอนที่ 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); } } } } }