传送实现
9 分
实现一个门户,通过它ZEPETO角色可以传送到两个不同的点。

步骤 1 : 设置传送目标点
- 在场景中实现ZEPETO角色创建代码作为默认。
📘 请参考以下指南。[创建ZEPETO角色]
1) 创建传送点。
- 在本指南中,我们将其称为A点和B点。
- 创建一个层级 > 3D对象 > 平面,并将其重命名为Plane_A。

2) 添加一个传送门对象以启动传送。
- 确保添加一个碰撞体以与对象交互。
- 调整区域的大小以检测碰撞。
- 确保检查是否为触发器。

3) 以相同的方式创建总共2个传送点。

传送点A的示例

传送点B的示例
- 调整位置以确保点不重叠。

步骤 2 : 编写脚本
1) 创建一个项目 > 创建 > ZEPETO > TypeScript,并将其重命名为 Teleport。
2) 编写如下示例脚本。
- 当在附加脚本的对象的碰撞区域内检测到与 ZEPETO 角色的碰撞时,逻辑将目标对象传送。
import { Collider, Vector3, Quaternion, GameObject } from 'UnityEngine';
import { SpawnInfo, ZepetoCharacter, ZepetoPlayer, ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
export default class Teleport extends ZepetoScriptBehaviour {
// 要传送到的目标对象
public destinationObject: GameObject;
private _localCharacter: ZepetoCharacter;
Start() {
// 找到本地玩家并将其设置为 _localCharacter
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
this._localCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
});
}
OnTriggerEnter(collider: Collider) {
// 如果 _localCharacter 尚未设置或碰撞的 gameObject 不是 _localCharacter,则不执行该函数
if (this._localCharacter == null || collider.gameObject != this._localCharacter.gameObject) {
return;
}
// 将 _localCharacter 传送到 destinationObject 的位置
this._localCharacter.Teleport(this.destinationObject.transform.position, Quaternion.identity);
}
}
3) 完成脚本编写后,将脚本添加到将启动传送的 Portal 对象。
4) 在检查器中,分配目标对象。
- 目标对象 : 一个传送到达终点的传送门对象。

步骤 3 : 运行
当ZEPETO角色靠近传送门时,将其从A点传送到B点。

- 本指南仅处理我操控的本地玩家的传送。
- 在多人世界中,还需要同步其他玩家的位置。
- 使用多人示例的同步组件,位置同步易于实现。
📘 多人游戏示例 - Zepeto 多人游戏组件 https://github.com/naverz/zepeto-multiplay-example/tree/main/Assets/Zepeto Multiplay Component