---
title: 更改ZEPETO角色的碰撞区域
slug: world-sdk-guide-ch/sO8u-zepeto
docTags: 
createdAt: 2024-09-02T08:34:13.135Z
---

无论ZEPETO角色的身体形状如何，角色控制器的碰撞区域大小对所有角色都是一致的。

角色控制器的碰撞区域是根据基本身体形状量身定制的，呈圆柱形。

在运行时的场景模式中，通过选择生成的ZEPETO角色，您可以查看角色控制器的碰撞区域。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-A5GXFRkfmN9aEa64kaJaQ-20240904-102421.png "角色控制器的圆柱形碰撞区域")

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-2CX0JUoiPDEzaCP6lI0jh-20240904-102421.png "控制器碰撞区域的默认值")



ZEPETO角色的高度可以根据其身体形状或装备的物品而有所不同。

当与基本身体形状有显著差异时，碰撞区域有时会显得不自然。

:::hint{type="info"}
**📘&#x20;**&#x8BF7;参考以下指南。\[[想知道角色的高度](docId\:PfL81Az7xmf_qn9Ckd7M0)]
:::



在这种情况下，您可以在运行时使用脚本修改角色控制器的碰撞器属性值。

- 高度：碰撞区域的高度
- 中心：碰撞区域的中心轴
- 半径：碰撞区域的半径

请注意，示例中使用的值是为测试世界和测试账户设置的。请根据您的世界调整设置。在示例中，半径值没有被更改。

```typescript
import {HumanBodyBones, Vector3, WaitForEndOfFrame, WaitForSeconds } from 'UnityEngine';
import {KnowSockets, LocalPlayer, ZepetoPlayers, ZepetoPlayer } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
 
export default class ChangeCollider extends ZepetoScriptBehaviour {
 
     private _localPlayer: LocalPlayer;
 
     Start() {
 
         ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
             this._localPlayer = ZepetoPlayers.instance.LocalPlayer;
             
             // 测量本地角色的高度
             this.StartCoroutine(this.CoGetZepetoHeight(this._localPlayer.zepetoPlayer));
         });
     }
 
     *CoGetZepetoHeight(zepeto: ZepetoPlayer) {
         yield new WaitForEndOfFrame();
         const headPosition = zepeto.character.GetSocket(KnowSockets.HEAD_UPPER).position;
         const leftFootPosition = zepeto.character.ZepetoAnimator.GetBoneTransform(HumanBodyBones.LeftFoot).position;
         const rightFootPosition = zepeto.character.ZepetoAnimator.GetBoneTransform(HumanBodyBones.RightFoot).position;
         const characterCenter = Vector3.Lerp(leftFootPosition, rightFootPosition, 0.5);
         const characterHeight = Vector3.Distance(headPosition, characterCenter);
         // 本地角色的高度
         console.log(characterHeight);                  
 
        // 根据比例设置高度和中心点，假设基本身体形状的高度约为0.85
        let controllerHeight = characterHeight / 0.85 * 1.2;
        let controllerCenterY = controllerHeight / 2;
 
        this._localPlayer.zepetoPlayer.character.characterController.height = controllerHeight;
        this._localPlayer.zepetoPlayer.character.characterController.center = new Vector3(0, controllerCenterY, 0);      
    }
}
```

- 基本脚本涉及访问角色控制器并修改属性值：
  - this.\_localPlayer.zepetoPlayer.character.characterController.height = number;
  - this.\_localPlayer.zepetoPlayer.character.characterController.center = Vector3;

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-L4CwJhI8J4UpJVYEdgzM1-20240904-102421.gif "在运行时，较小身体形状的碰撞区域减少的外观")

:::hint{type="danger"}
- 可能会出现无法正确测量穿戴特定独特物品的头像高度的情况。
:::

