You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ursina中如何为Entity对象设置自定义碰撞器并调整大小?

Ursina树木碰撞盒缩小无效的解决方法

问题核心错误

你之前的尝试存在两个关键问题:

  • 修改碰撞盒大小时用**世界坐标(spawnTree.position)**计算尺寸,这会导致碰撞盒偏移到完全错误的位置,自然看不到效果;
  • 手动创建BoxCollider时,center参数传了世界坐标,但它需要的是相对于树木实体的本地坐标,这直接导致碰撞盒和树木完全错位,所以玩家碰不到。

正确实现方式

方式一:在树类初始化时直接定义自定义碰撞盒

修改tree类,直接在初始化阶段创建合适大小的BoxCollider,无需依赖默认的collider='box':

from ursina import Entity, BoxCollider, Vec3

class tree(Entity):
    def __init__(self, position):
        super().__init__(
            model="Assets/SimpleTree.fbx",
            texture="Assets/Treesnow.png",
            scale=0.007,
            position=position,
            double_sided=True
        )
        # 手动创建碰撞盒,size数值根据模型实际缩放调整,示例用Vec3(0.4, 6, 0.4)
        # center设为(0,3,0),让碰撞盒居中在树干区域
        self.collider = BoxCollider(self, center=Vec3(0, 3, 0), size=Vec3(0.4, 6, 0.4))

方式二:修改默认box碰撞器的尺寸

如果坚持用默认的collider='box',可以在实体创建后修改碰撞盒的scale或直接设置size,注意要用本地坐标数值:

# 生成树木的代码修改
if chance > 0.5:
    spawnTree = tree(position=(i+randint(2, 6), 0, j+randint(2, 6)))
    # 缩小碰撞盒,scale是相对于默认碰撞盒的比例,比如0.3就是缩小到30%
    spawnTree.collider.scale = Vec3(0.3, 1, 0.3)
    # 也可以直接设置size,同样用本地坐标数值
    # spawnTree.collider.size = Vec3(0.4, 6, 0.4)

额外调试技巧

初始化Ursina时开启editor_ui=True,可以直观看到碰撞盒的位置和大小,方便快速调整数值,找到既能让玩家穿行又不会过度穿模的尺寸。

内容的提问来源于stack exchange,提问作者lvl1_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:03:32