创造你的世界
玩家及角色:进阶
四分之一视图示例
4分
zepeto角色控制可以自定义为使用unity的新输入系统,而不是v pad。 这些是设置四分之一视图控制的示例。 步骤 1 相机视图设置 将相机设置为四分之一视图(这是一个示例,请根据您的项目修改相机设置)。 此时,相机的标签应设置为maincamera。 步骤 2 输入动作设置 通过为四分之一视图定义新的输入动作,您可以通过触摸屏控制角色移动。 选择创建 > 输入动作,并将文件名设置为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); } } } } }