---
title: 传送实现
slug: world-sdk-guide-ch/CDy6ia2jonyBYDBpBEc_l
docTags: 
createdAt: 2024-09-02T08:34:13.135Z
---

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



![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-xQUSTAIqb6XR3_ijDqhI3-20240904-102421.gif)



## 步骤 1 : 设置传送目标点



- 在场景中实现ZEPETO角色创建代码作为默认。

:::hint{type="info"}
**📘&#x20;**&#x8BF7;参考以下指南。\[[创建ZEPETO角色](docId\:x_uqceZxzv-RaMS18k0bt)]
:::



1\) 创建传送点。

- 在本指南中，我们将其称为A点和B点。
- 创建一个层级 > 3D对象 > 平面，并将其重命名为Plane\_A。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-YPfNLxuMmybV-RiO0UnQh-20240904-102421.png)



2\) 添加一个传送门对象以启动传送。

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

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-zsw3KDDtRnc65lbmesDh1-20240904-102421.png)



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

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-esYtCDox6OMaljFjTWWNa-20240904-102421.png "传送点A的示例")



![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-vB1mUIZBJCc8INMKDEr_A-20240904-102421.png "传送点B的示例")



- 调整位置以确保点不重叠。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-W8LMhFUKNiUbYj8h1QeEW-20240904-102421.png)



## 步骤 2 : 编写脚本



1\) 创建一个项目 > 创建 > ZEPETO > TypeScript，并将其重命名为 Teleport。

2\) 编写如下示例脚本。

- 当在附加脚本的对象的碰撞区域内检测到与 ZEPETO 角色的碰撞时，逻辑将目标对象传送。

```typescript
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\) 在检查器中，分配目标对象。

- 目标对象 : 一个传送到达终点的传送门对象。

::Image[]{src="https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-y-PuKoPDgX5mbE1uVnOUE-20240904-102421.png" size="62" width="424" height="601" position="center" showCaption="false"}



## 步骤 3 : 运行



当ZEPETO角色靠近传送门时，将其从A点传送到B点。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-FjXBe_11wP8xMnFzwYT_M-20240904-102421.png)



:::hint{type="danger"}
- 本指南仅处理我操控的本地玩家的传送。
- 在多人世界中，还需要同步其他玩家的位置。
- 使用多人示例的同步组件，位置同步易于实现。
:::



:::hint{type="info"}
**📘 多人游戏示例 - Zepeto 多人游戏组件**
[https://github.com/naverz/zepeto-multiplay-example/tree/main/Assets/Zepeto Multiplay Component](https://github.com/naverz/zepeto-multiplay-example/tree/main/Assets/Zepeto%20Multiplay%20Component)
:::

