创造你的世界
玩家及角色:进阶
使用V-pad
17分
v pad 需要一个控制用户界面来操控角色在世界中的行为。 zepeto world 基本上通过 zepetoplayers 在运行时创建一个名为 v pad 的控制用户界面。 v pad 可以根据玩家在屏幕上触摸的区域执行以下功能: 1\) 屏幕触摸板:当您触摸触摸板区域并向上、向下、向左或向右滑动时,本地玩家沿xz轴移动。 当您在触摸板区域内点击时,触摸板会出现在被触摸的位置,并在触摸操作完成后消失。 默认的触摸板区域如下: 屏幕模式 画布大小 区域大小 水平 1334 x 750 600 x 450 垂直 750 x 1334 375 x 500 2\) 跳跃按钮:按下按钮会使本地玩家跳跃。跳跃的高度值可以通过zepeto players > character > jump power进行更改。 👍 提示 通过设置在 zepeto 玩家控制中注册的预制件区域,可以更改垫区域。 按以下顺序更改区域的大小。 选择在 zepeto 玩家控制中注册的默认预制件,并通过拖放将其复制到资产中。 选择复制的预制件中的垫对象。 将 rect transform 组件的宽度和高度更改为所需的大小。 运行时创建的 v pad 对象结构如下。 1\) 垫子:一个可以移动角色位置的屏幕ui对象。 背景:一个半透明的黑色背景图像,显示垫子区域。 把手原点:垫子的外圈区域。把手原点的位置会根据触摸的位置而变化。 把手:垫子的内圈区域。当把手被触摸并拖动时,它的位置会改变,并且不会离开把手原点区域。 2) 跳跃:一个允许角色跳跃的按钮对象。 向上:跳跃按钮内的跳跃图像对象。 如何获取 v pad 输入值 为了接收 v pad 输入值,您必须访问在运行时创建的 zepetoscreentouchpad 组件和 zepetoscreenbutton 组件,并注册一个事件。 zepetoscreentouchpad 事件 zepetoscreenbutton 组件是一个角色跳跃按钮组件。可访问的事件包括: 事件 描述 onpointerdownevent 当用户按下 v pad 时发生此事件。 ondragevent 当用户按住 v pad 时发生此事件。 onpointerupevent 当用户释放 v pad 时发生此事件。 zepetoscreenbutton 事件 zepetoscreenbutton 组件是一个角色跳跃按钮组件。可访问的事件包括: 事件 描述 onpointdownevent 当用户按下跳跃按钮时发生此事件。 onpointupevent 当用户释放跳跃按钮时发生此事件。 示例脚本 以下脚本是一个示例,当用户按下触摸板时,将 v pad 位置值输出到控制台。 getvpadinput import { object } from 'unityengine'; import { zepetoplayers, zepetoscreenbutton, zepetoscreentouchpad } from 'zepeto character controller'; import { zepetoscriptbehaviour } from 'zepeto script' export default class getvpadinput extends zepetoscriptbehaviour { start() { // 添加一个监听器,当本地玩家被添加时触发 zepetoplayers instance onaddedlocalplayer addlistener(() => { this getpadtouch(); this getjumptouch(); }); } getpadtouch() { // 在场景中找到 zepetoscreentouchpad 对象 const touchpad = object findobjectoftype\<zepetoscreentouchpad>(); // 为触摸板的拖动事件添加监听器 touchpad ondragevent addlistener(() => { // 当发生拖动事件时记录触摸手柄的位置 console log(touchpad touchhandle transform position); }); } getjumptouch() { // 在场景中找到 zepetoscreenbutton 对象 const screenbutton = object findobjectoftype\<zepetoscreenbutton>(); // 为 screenbutton 的 onpointdownevent 添加监听器 // 当按钮被按下时,此监听器记录 "跳跃按钮按下" screenbutton onpointdownevent addlistener(() => { console log("跳跃按钮按下"); }); // 为 screenbutton 的 onpointupevent 添加监听器 // 当按钮被释放时,此监听器记录 "跳跃按钮释放" screenbutton onpointupevent addlistener(() => { console log("跳跃按钮释放"); }); } } 脚本描述 注册一个事件监听器,当一个本地玩家被添加到场景时调用 getpadtouch() 和 getjumptouch() 函数。 这个 getpadtouch() 函数是一个处理发生在触摸板上的触摸事件的函数。 使用 object findobjectoftype\<zepetoscreentouchpad>() 在场景中查找一个 zepetoscreentouchpad 对象。 为触摸板的 ondragevent 当触摸板上发生拖动事件时,这个监听器会被触发。 在监听器中,触摸手柄的位置输出到控制台。 这个 getjumptouch() 函数是一个处理从跳跃按钮发生的事件的函数。 使用 object findobjectoftype\<zepetoscreenbutton>() 在场景中查找一个 zepetoscreenbutton 对象。 为跳跃按钮的 onpointdownevent 和 onpointupevent 添加监听器。 在 onpointdownevent , 每次按下跳跃按钮时,输出一个名为 jump button down 的日志。 在 onpointupevent , 每当释放跳跃按钮时,输出一个名为 jump button up 的日志。 如果你通过按下播放按钮来运行它,你可以看到每次按下 v pad 时控制台日志中显示的 v pad 位置值。每次按下或释放跳跃按钮时,你也会看到控制台日志显示。 v pad 自定义 您可以使用屏幕触控板和屏幕按钮控制 v pad。 您可以从 uicontroller touchpad horizontal 和 uicontroller touchpad vertical prefab 中打开/关闭 v pad。 下面是关闭触控板时的样子。您可以以相同的方式关闭跳跃按钮。 双重跳跃设置 您可以为 v pad 的跳跃按钮添加双重跳跃功能或应用自定义双重跳跃按钮功能。 要启用双重跳跃功能,请在 zepetoplayers 组件的角色部分激活自定义参数 > 双重跳跃复选框。 双跳的高度可以通过调整功率值来设置。 在v pad上使用双跳功能有三种方法: 1\) 通过v pad预制件设置 使用v pad按钮进行双跳时,设置如下。 点击uicontroller touchpad vertical或uicontroller touchpad horizontal预制件。您将被移动到项目面板中packages文件夹下原始预制件所在的文件夹。 通过拖放uicontroller touchpad vertical或uicontroller touchpad horizontal预制件到assets文件夹中来复制它。 ❗️ 注意 packages 文件夹中的原始预制件无法修改,因此您必须将其复制到 assets 文件夹中进行修改。 如果您尝试修改原始预制件,将会出现不可变预制件错误。 双击复制的预制件项中的 uicontroller touchpad vertical 或 uicontroller touchpad horizontal 预制件,或在检查器窗口中按下打开预制件按钮以编辑预制件。 从预制件的子对象中选择 jump 对象。 在jump对象的zepeto屏幕按钮组件中,按下on point down event()中的+按钮,并注册如下事件。 on point down event() 仅限运行时 选择对象:注册uicontroller touchpad vertical或uicontroller touchpad horizontal。 事件功能:点击无功能部分并设置为uizepetoplayercontrol > doublejump() 功能。 如果设置如下,则成功。 2\) 使用脚本进行设置 该脚本允许角色根据v pad的跳跃按钮输入执行双重跳跃。 import { zepetoscriptbehaviour } from 'zepeto script'; import { object } from 'unityengine'; import { zepetoscreenbutton, characterstate, zepetoplayers } from 'zepeto character controller'; export default class dobulejump extends zepetoscriptbehaviour { start() { // 监听本地玩家添加时执行给定的 lambda 函数 zepetoplayers instance onaddedlocalplayer addlistener(() => { // 获取本地玩家的角色 const zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; // 在场景中查找 zepetoscreenbutton 类型的对象 const screenbutton = object findobjectoftype\<zepetoscreenbutton>(); // 为屏幕按钮的 onpointdownevent 添加监听器以处理跳跃动作 screenbutton onpointdownevent addlistener(() => { // 如果角色的当前状态是 jump,则触发双重跳跃 if (zepetocharacter currentstate === characterstate jump) { zepetocharacter doublejump(); } }); }) } } 脚本描述 zepetoplayers instance onaddedlocalplayer addlistener() 注册一个监听器,当本地玩家被添加到游戏时触发。此功能用于配置双重跳跃功能,以便在添加本地玩家时添加。 zepetoplayers instance localplayer zepetoplayer character 提供对本地玩家角色的访问。 object findobjectoftype() 在当前场景中查找 zepetoscreenbutton 类型的对象并将其分配给跳跃动作。 screenbutton onpointdownevent addlistener() 为屏幕按钮的 onpointdownevent 添加监听器。此监听器等待屏幕触摸或点击事件并启动跳跃或双重跳跃动作。 在监听器中,if 语句检查角色的当前状态是否为 characterstate jump。如果为真,则执行 zepetocharacter doublejump() 。 编写脚本后,在场景中创建一个空的 gameobject,并将 dobulejump ts 脚本作为组件添加。 3\) 通过自定义按钮设置 如果您选择创建并使用自己的按钮,请添加如下所示的脚本。 此脚本为用户定义的按钮添加跳跃和双跳功能。 import { zepetoscriptbehaviour } from 'zepeto script'; import { button } from 'unityengine ui'; import { characterstate, zepetocharacter, zepetoplayers } from 'zepeto character controller'; export default class jumpbutton extends zepetoscriptbehaviour { public shotbutton button; private zepetocharacter zepetocharacter; start() { // 创建角色 zepetoplayers instance onaddedlocalplayer addlistener(() => { this zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; }); // 添加脚本组件 this shotbutton onclick addlistener(() => { if (this zepetocharacter currentstate === characterstate jump) { this zepetocharacter doublejump(); } else { this zepetocharacter jump(); } }); } } 脚本描述 zepetoplayers instance onaddedlocalplayer addlistener() 注册一个函数,当本地玩家被添加到游戏时执行。 this shotbutton onclick addlistener() 添加一个函数,当shotbutton被点击时执行。 当函数被触发时,它会检查角色的当前状态是否为跳跃状态,并执行跳跃或双跳。 如果角色处于跳跃状态, this zepetocharacter doublejump() 被调用以执行双跳;否则, this zepetocharacter jump() 被调用以执行跳跃。 编写脚本后,在场景中创建一个空的gameobject,并将jumpbutton ts脚本作为组件添加。 最后,在检查器中将跳跃按钮分配给shot button。