---
title: 将物体附加到ZEPETO角色
slug: world-sdk-guide-ch/R6xC-zepeto
docTags: 
createdAt: 2024-09-02T08:34:13.134Z
---

将一个物体附加到ZEPETO角色上，以便当角色移动时，物体也随之移动。

::Image[]{src="https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-RVU1Pj2VnYVimqUgTc6-f-20240904-102420.gif" size="40" width="800" height="648" position="center" showCaption="false"}



## 步骤 1 : 准备一个物体预制件



首先，您需要将物体转换为预制件。
创建一个物体，将其拖到资产文件夹中并将其制作成预制件。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-a1A3QEkz2EOYUKkkmWhU6-20240904-102418.png "物体预制件示例")



## 步骤 2 : 脚本将物体附加到角色的特定部分



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

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



### 步骤 2-1 : 编写脚本

1\) 创建层级 > 创建空对象并将其重命名为 AttachObject。

2\) 创建项目 > 创建 > ZEPETO > TypeScript 并将其重命名为 AttachObject。

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

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { ZepetoCharacter, ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { Transform, Animator, GameObject, HumanBodyBones, Object } from 'UnityEngine';

export default class AttachObject extends ZepetoScriptBehaviour {

    // 要附加到身体上的对象预制件。
    public prefItem: GameObject;
    // 要附加对象的骨骼。
    public bodyBone: HumanBodyBones;

    private _localCharacter: ZepetoCharacter;

    Start() {
      
        ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
            // 找到本地玩家并将其设置为 _localCharacter。
            this._localCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
            // 获取 _localCharacter 的动画组件。
            const animator: Animator = this._localCharacter.ZepetoAnimator;
            // 获取要附加对象的骨骼位置。
            const bone: Transform = animator.GetBoneTransform(this.bodyBone);
            // 创建对象预制件。
            Object.Instantiate(this.prefItem, bone) as GameObject;
          
        });
    }
}
```



- 脚本流程如下：
  - Start()
    - 注册 ZepetoPlayers.instance.OnAddedLocalPlayer 事件监听器，当本地玩家被添加时会触发。
    - 将本地玩家设置为 \_localCharacter 变量。
    - 获取 \_localCharacter 的动画组件，获取 bodyBone 中指定的位置，并在该位置创建 prefItem 中指定的预制件。



### 步骤 2-2 : 在检查器中设置附加位置

1\) 完成脚本编写后，将脚本添加到 AttachObject 对象中。

2\) 在检查器中，分配 Pref 项，Body Bone。

- Pref 项是对象预制件。
- Body Bone 是对象将被创建的位置。
  - 选择左手，使其看起来像你在手中握着对象。



![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-da9YMvrZkYu620CaOeWE0-20240904-102418.png "示例脚本设置屏幕")



3\) 按下播放按钮运行，你将看到 ZEPETO 角色的左手上附着了对象。



## 步骤 3 : 应用



你可以以相同的方式将任何对象附加到 Body Bone 的所需位置。

:::hint{type="info"}
**📘 Unity 人体骨骼**
[https://docs.unity3d.com/ScriptReference/HumanBodyBones.html](https://docs.unity3d.com/ScriptReference/HumanBodyBones.html)
:::



以下是将 BuildIt 的颈枕对象附加到角色脖子上的示例，使 ZEPETO 角色看起来像是戴着颈枕。

::Image[]{src="https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-NvEWim8bsEaTZfU8ZnIWz-20240904-102420.gif" size="58" width="800" height="648" position="center" showCaption="false"}



- 您可以适当地调整对象的位置和旋转，以获得所需的外观。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-nQ0DQLTax73xt5ioGw0Hm-20240904-102418.png "对象预制件配置示例")



- 在检查器中，将颈枕对象分配给预制项，并选择颈部作为身体骨骼。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-_Id79tFqG3jX3dvvG1Cjb-20240904-102418.png "示例脚本设置屏幕")

