创造你的世界
与物体互动
实现一个跟随角色的对象
3 分
通过使用 navmeshagent 组件,你可以创建一个跟随 zepeto 角色的 ai 对象。 在本指南中,我们将实现一个跟随你角色的 pet 对象。 创建 pet 对象 打开 navigation (obsolete) 窗口 在 unity 顶部菜单中点击 window > ai > navigation (obsolete) ,打开 navigation (obsolete) 窗口。 定义 pet 对象可以移动的区域 在 navigation (obsolete) 窗口中,点击 object 选项卡。在 hierarchy 中选择需要加入 navmesh 的地面、墙壁或障碍物,并添加到 object 中。 这样可以让 pet 对象识别哪些是可行走区域,哪些是障碍物。 请确保勾选了 navigation static 选项。 ✏️ 关于 navmesh 的详细信息,请参阅以下视频。 生成 navmesh 点击 bake 选项卡,然后点击底部的 bake 按钮以生成 navmesh。 添加 navmeshagent 在 hierarchy 中选择 pet 对象,然后在 inspector 中添加 navmeshagent 组件。 此处的 agent 指的是通过 navmesh 导航系统移动的 pet 对象。 你可以调整 agent 的大小、移动速度、旋转速度、加速度以及识别障碍物的高度等属性。 ✏️ 关于 navmeshagent 的更多信息,请参考以下 链接 。 在本示例中,我们将 navmeshagent 的 stopping distance 设置为 3,使 pet 会在距离玩家 3 的位置停止。 创建 petcontroller 脚本 在 project 窗口中点击 + 按钮 > zepeto > typescript 创建一个新的脚本,并命名为 petcontroller 。 打开脚本并粘贴下面的代码。 import { transform } from 'unityengine' import { navmeshagent } from 'unityengine ai'; import { zepetoplayers } from 'zepeto character controller' import { zepetoscriptbehaviour } from 'zepeto script' import { worldservice } from 'zepeto world'; export default class petcontroller extends zepetoscriptbehaviour { private target transform; private navmeshagent navmeshagent; start() { this navmeshagent = this getcomponent\<navmeshagent>(); zepetoplayers instance onaddedlocalplayer addlistener(() => { this target = zepetoplayers instance getplayer(worldservice userid) character transform; }) } update() { if (this target == null) { return; } this navmeshagent setdestination(this target position); } } 脚本说明 脚本开始时,将 target 设置为你的 zepeto 角色。 在 update 函数中,每一帧会通过 setdestination 将角色的位置设置为 navmesh 的目标点。 将 petcontroller 脚本应用到 pet 对象上 在 hierarchy 中选择 pet 对象,在 inspector 中点击 add component > zepeto script ,然后将刚才创建的 petcontroller 脚本拖入 script 栏中。 点击播放按钮 你现在可以看到 pet 对象会跟随你的角色移动,并能够自然地避开墙壁等障碍物。 创建角色头顶的 pet 如果你希望 pet 不是跟随角色,而是附着在角色身体上,可以使用对象附着的方式。 ✏️ 有关对象粘贴的详细内容请参考 将物体附加到zepeto角色 docid\ r6xczne z5w8uycbga18u 指南。 创建 attachpetcontroller 脚本 在 project 中点击 + > zepeto > typescript ,创建新脚本并命名为 attachpetcontroller。 打开脚本并粘贴下方的代码。 import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetocharacter, zepetoplayers } from 'zepeto character controller'; import { transform, animator, gameobject, humanbodybones, object } from 'unityengine'; export default class attachpetcontroller extends zepetoscriptbehaviour { public pet gameobject; public bodybone humanbodybones; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { const localcharacter = zepetoplayers instance localplayer zepetoplayer character; const animator animator = localcharacter zepetoanimator; const bone transform = animator getbonetransform(this bodybone); object instantiate(this pet, bone) as gameobject; }); } } 脚本说明 脚本启动后会查找本地玩家并获取其 animator。 通过 bodybone 变量识别所选身体部位并获取其位置。 随后在该位置 instantiate 出 pet 对象,并将其 parent 设为对应的身体部位。 将 attachpetcontroller 脚本应用到新对象 在 hierarchy 中点击 + > create empty 创建一个新对象,命名为 attachpetcontroller 。 在 inspector 中点击 add component > zepeto script , 将 attachpetcontroller 脚本拖入 script 栏中。 将 pet 对象拖入 pet 字段,并在 bodybone 下拉菜单中选择要附着的角色身体部位。 点击播放按钮,即可看到 pet 对象生成在你选择的身体部位上。