创造你的世界
玩家和角色:基础
ZEPETO角色
16 分
zepeto角色是用于在世界场景中加载的基本zepeto角色实例单元。 要控制zepetocharacter,请将以下导入语句添加到脚本中。 import { zepetocharacter } from 'zepeto character controller'; zepetocharacter api 此api创建和移除zepeto角色实例,包括动画控制器和角色控制器组件。 api 描述 createbyzepetoid(zepetoid string, spawninfo spawninfo, complete system action$1) 使用zepeto id生成zepeto角色实例。主要用于npc角色创建。 createbyuserid(userid string, spawninfo spawninfo, complete system action$1) 使用userid创建zepeto角色实例。主要用于npc角色创建。 removecharacter(character zepetocharacter) 删除角色实例。 此api创建zepeto角色模型实例,不包括动画控制器和角色控制器组件。 zepeto id 这是用户直接指定并在zepeto应用程序中使用的id值。 用户id 这是一个唯一的id值,用于区分zepeto系统中的用户,并不是在ui上暴露的值。您可以使用脚本检查它。 如果您对zepetocharacter api感兴趣,请参考文档: 请参考以下指南。 \[ zepeto character controller api https //developer zepeto me/docs/character controller/ ] 创建/删除角色 import { zepetoscriptbehaviour } from 'zepeto script'; import { spawninfo, zepetocharacter, zepetocharactercreator } from 'zepeto character controller'; import { button } from 'unityengine ui'; import { gameobject, object, vector3 } from 'unityengine'; import { worldservice } from 'zepeto world'; export default class samplescript extends zepetoscriptbehaviour { public zepetoid string; public removeclonecharacterbutton button; public removeclonecharactermodelbutton button; private clonecharacter zepetocharacter; private clonecharactermodel gameobject; start() { // 创建 spawninfo 类的新实例 const firstclonespawninfo = new spawninfo(); firstclonespawninfo position = new vector3(0,0,1); const secondclonespawninfo = new spawninfo(); secondclonespawninfo position = new vector3(0,0,3); // 使用 zepetoid 创建 `zepetocharacter` zepetocharactercreator createbyzepetoid(this zepetoid, firstclonespawninfo, (character zepetocharacter) => { this clonecharacter = character; }); // 使用 zepetoid 创建 `zepetocharactermodel` zepetocharactercreator createmodelbyzepetoid(this zepetoid, secondclonespawninfo, (object) => { this clonecharactermodel = object; }); // 使用 userid 创建 `zepetocharacter` / zepetocharactercreator createbyuserid(worldservice userid, new spawninfo(), (character zepetocharacter) => { this clonecharacter = character; }) // 使用 userid 创建 `zepetocharactermodel` zepetocharactercreator createmodelbyuserid(worldservice userid, new spawninfo(), (object) => { this clonecharactermodel = object; }) / // 为 `removeclonecharacterbutton` 设置点击事件以移除克隆角色。 this removeclonecharacterbutton onclick addlistener(() => { zepetocharactercreator removecharacter(this clonecharacter); }); // 为 `removeclonecharactermodelbutton` 设置点击事件以销毁克隆角色模型。 this removeclonecharactermodelbutton onclick addlistener(() => { object destroy(this clonecharactermodel); }); } } 如果你运行这个示例,你会看到左侧的charactermodel是没有animator controller和character controller组件创建的,如下所示。 控制角色 将通过场景中的角色实例脚本提供一个可以直接控制角色的接口。 api 描述 movetoposition(position vector3) 将角色移动到指定位置。 movecontinuously(direction vector3) 持续在角色所看方向上移动(更新)。 movecontinuously(direction vector2) 持续在角色所看方向上移动(更新)。 stopmoving() 停止角色的移动。 jump() 角色跳跃到设置的跳跃力量。 doublejump() 角色使用当前设置的双重跳跃力量进行双重跳跃。(仅适用于使用motioncontroller v2时) teleport(position unityengine vector3, rotation unityengine quaternion) 角色瞬间移动到变换位置。 setgesture(gesture unityengine animationclip) 对于指定的animationclip,角色动作将被播放。 在setgesture运行时,用户的控制输入不会应用于角色。 当animationclip的循环选项开启时,它将持续播放,直到调用cancelgesture()。 cancelgesture() 停止通过setgesture()播放的当前animation clip。 当执行cancelgesture()时,用户的控制输入将再次应用于角色控制。 控制字符示例代码。 import { zepetoscriptbehaviour } from 'zepeto script' import {spawninfo, zepetocharacter, zepetocharactercreator} from "zepeto character controller"; import { worldservice } from 'zepeto world'; import {animationclip, vector3, waitforseconds } from 'unityengine'; export default class characteractionsample extends zepetoscriptbehaviour { public targetposition vector3; public dancegesture animationclip; private clonecharacter zepetocharacter; start() { // 使用 `zepetocharactercreator createbyuserid` 创建一个 `zepetocharacter`。 zepetocharactercreator createbyuserid(worldservice userid, new spawninfo(), (character zepetocharacter) => { // 将创建的角色分配给 ` clonecharacter`。 this clonecharacter = character; // 将 `actioncoroutine()` 作为协程执行。 this startcoroutine(this actioncoroutine()); }) } actioncoroutine() { yield new waitforseconds(3); // 在等待 3 秒后,将 ` clonecharacter` 移动到 `targetposition`。 this clonecharacter movetoposition(this targetposition); yield new waitforseconds(1); // 在等待 1 秒后,让 ` clonecharacter` 跳跃。 this clonecharacter jump(); yield new waitforseconds(1); // 在等待 1 秒后,将 ` clonecharacter` 的手势设置为 `dancegesture`。 this clonecharacter setgesture(this dancegesture); yield new waitforseconds(3); // 在等待 3 秒后,取消 ` clonecharacter` 的手势。 this clonecharacter cancelgesture(); } } 如果你运行这个示例,你会看到克隆的角色按以下顺序执行指定的动作。 📘 请参考以下指南。 \[ 创建一个npc docid\ rlgzcxrmstkkq6jvtt4l3 ] 运动状态 与zepeto角色的运动状态相关的api如下: api 描述 motionstate usedoublejump = (boolean); 设置角色是否可以使用双跳。 motionstate doublejumppower = (number); 设置角色的双跳力量。 motionstate uselandingroll = (boolean); 设置是否使用角色的落地翻滚。 motionstate landingrollspeed = (number); 设置角色的落地翻滚速度值。 motionstate usemoveturn = (boolean); 设置是否使用角色的移动转向。 motionstate gravity = (number); 设置角色的重力值。 motionstate currentjumpstate 您可以检查角色的当前跳跃状态。 \ 无 = 1, 跳跃静止 = 0, 跳跃移动 = 1, 跳跃冲刺 = 2, 双跳 = 3 motionstate currentlandingstate 您可以检查角色的当前落地状态。 \ 无 = 1, 落地轻微 = 0, 落地深 = 1, 落地翻滚 = 2 motionstate currentmovestate 您可以检查角色的当前移动状态。 \ 无 = 1, 移动行走 = 0, 移动奔跑 = 1 运动状态示例代码 import { zepetoscriptbehaviour } from 'zepeto script' import { custommotiondata, spawninfo, zepetocharacter, zepetocharactercreator, zepetoplayer, localplayer, zepetoplayers } from "zepeto character controller"; import { worldservice } from 'zepeto world'; import { button } from 'unityengine ui'; export default class motionsample extends zepetoscriptbehaviour { public jumpbutton button; private clonecharacter zepetocharacter; start() { zepetocharactercreator createbyuserid(worldservice userid, new spawninfo(), (character zepetocharacter) => { // 将创建的角色分配给 ` clonecharacter`。 this clonecharacter = character; // 设置 ` clonecharacter` 中 `motionstate` 的各种属性。 this clonecharacter motionstate usedoublejump = true; this clonecharacter motionstate usedoublejump = true; this clonecharacter motionstate uselandingroll = true; this clonecharacter motionstate usemoveturn = true; this clonecharacter motionstate gravity = 1; }) this jumpbutton onclick addlistener(() => { this clonecharacter jump(); }); } update() { // 检查 ` clonecharacter` 是否不为 null。 if (this clonecharacter != null) { // 打印 ` clonecharacter` 中 `motionstate` 的当前跳跃状态。 console log(`当前跳跃状态 ${this clonecharacter motionstate currentjumpstate}`); // 打印 ` clonecharacter` 中 `motionstate` 的当前着陆状态。 console log(`当前着陆状态 ${this clonecharacter motionstate currentlandingstate}`); // 打印 ` clonecharacter` 中 `motionstate` 的当前移动状态。 console log(`当前移动状态 ${this clonecharacter motionstate currentmovestate}`); } } } 控制 zepeto 角色动画师 控制 zepeto 角色动画师的 api api 描述 statemachine constraintstateanimation 从 zepeto world 版本 1 6 0 开始,characterstatemachine 中播放的动画过渡可以根据 motion v2 的 characterstate 开启/关闭。 \ true 关闭受控制器输入影响的 zepetocharacter currentstate,并控制所需的动画剪辑。 👍 使用 constraintstateanimation 的示例 您希望角色使用游泳动画而不是行走动画。您可以将游泳动画剪辑应用于新状态,并通过 constraintstateanimation 固定该状态。 如果您希望在移动角色时使用手势动画,可以将手势动画剪辑应用于新状态,并使用 constraintstateanimation 通过固定状态移动角色。 当您希望强制播放特定动画,同时暂时忽略应用于 animator 状态的参数值时,可以使用此功能。 zepetoanimator unityengine animator 函数以 zepetoanimator 的形式提供。 例如,如果您想为特定角色动画器的 "状态" 参数设置一个整数值,可以使用: zepetoanimator setinteger("state", 1); 有关更详细的用法,请参考 unityengine animator 文档和下面的示例脚本。 📘 unityengine animator https //docs unity3d com/scriptreference/animator html https //docs unity3d com/scriptreference/animator html 控制 zepeto 角色动画器的示例代码 一个由玩家控制的本地玩家 zepeto 角色的动画控制示例。 import { toggle } from 'unityengine ui'; import { spawninfo, zepetocharacter, zepetoplayers } from 'zepeto character controller'; import { zepetoscriptbehaviour } from 'zepeto script' import { worldservice } from 'zepeto world'; import { animator } from "unityengine"; export default class samplescript extends zepetoscriptbehaviour { public testtogle toggle; private zepetocharacter zepetocharacter; start() { // 本地玩家创建代码(如果您在其他地方已经使用本地玩家创建代码,请删除此部分) zepetoplayers instance createplayerwithuserid(worldservice userid, new spawninfo(), true); // 将创建的本地玩家设置为zepeto角色的代码。 zepetoplayers instance onaddedlocalplayer addlistener(() => { this zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; // setinteger 示例 const statetype = animator stringtohash("state"); this zepetocharacter zepetoanimator setinteger(statetype, 30); // statemachine constraintstateanimation this testtogle onvaluechanged addlistener((isactive bool)=>{ this zepetocharacter statemachine constraintstateanimation = isactive; console log(isactive); }); }); } } 如果您运行示例,您会看到当statemachine constraintstateanimation的值为true时,characterstatemachine中播放的动画过渡为off。 如果您将statemachine constraintstateanimation的值设置为false,它将返回到其原始状态。 控制角色阴影 从zepeto charactercontroller包的版本1 11 3开始,添加了一个接口以访问zepetocharacter shadow对象。 api 规范: charactershadow 组件接口 class charactershadow extends unityengine monobehaviour { public target unityengine transform; public autosynctransform boolean; } target 表示作为调整 charactershadow 对象变换的参考对象。 \ 默认情况下,zepeto 角色被设置为目标。charactershadow 对象的变换基于指定角色的底部进行调整。 autosynctransform 一个标志值,用于确定是否调整阴影的位置。 \ 默认值为 true。 通过这个,您可以在运行时控制 zepeto 角色的阴影。下面是一个使用切换开关来打开和关闭阴影的示例代码。 import { zepetoscriptbehaviour } from 'zepeto script' import { zepetocharacter, charactershadow, zepetoplayer, zepetoplayers } from 'zepeto character controller'; import { toggle } from 'unityengine ui'; export default class shadowcontroller extends zepetoscriptbehaviour { public shadowtoggle toggle; private charactershadow charactershadow; private localcharacter zepetocharacter; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; this charactershadow = this localcharacter context getcomponentinchildren\<charactershadow>(); console log(this charactershadow\ autosynctransform); }); this shadowtoggle onvaluechanged addlistener((isactive bool)=>{ this charactershadow\ gameobject setactive(isactive); }); } }