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

如何获取3D模型X/Y/Z轴长度以实现物体等间距排列?此前用Scale尝试失败

获取3D模型实际尺寸实现等间距排列

一、获取3D模型的X/Y/Z轴实际长度

Scale是缩放比例,和模型真实物理尺寸不直接对应,必须通过**包围盒(Bounds)**来获取实际尺寸,不同引擎的实现方式如下:

Unity(C#)

  • 通过Renderer组件获取(已考虑物体缩放):
Renderer objRenderer = targetObj.GetComponent<Renderer>();
Vector3 actualSize = objRenderer.bounds.size;
float xLen = actualSize.x;
float yLen = actualSize.y;
float zLen = actualSize.z;
  • 直接从Mesh获取(需手动乘以物体缩放):
MeshFilter meshFilter = targetObj.GetComponent<MeshFilter>();
Vector3 meshRawSize = meshFilter.mesh.bounds.size;
Vector3 actualSize = meshRawSize * targetObj.transform.localScale;

Unreal Engine(C++)

通过Actor的包围盒接口获取:

FVector origin;
FVector actualSize;
GetActorBounds(true, origin, actualSize); // true表示考虑子物体
float XLen = actualSize.X;
float YLen = actualSize.Y;
float ZLen = actualSize.Z;

Blender(Python)

直接读取物体的dimensions属性(已考虑缩放):

import bpy
target_obj = bpy.context.active_object
x_len = target_obj.dimensions.x
y_len = target_obj.dimensions.y
z_len = target_obj.dimensions.z

二、其他等间距排列的方法

1. 基于包围盒中心的自动排列

不用单独计算尺寸,直接利用包围盒的中心和半长来控制间距,确保物体间的间隙固定:
以Unity X轴排列为例:

List<GameObject> objects = new List<GameObject>(); // 待排列的物体列表
float gap = 1.5f; // 物体间的间隙

float currentPosX = 0;
foreach (var obj in objects)
{
    Renderer renderer = obj.GetComponent<Renderer>();
    float halfX = renderer.bounds.extents.x;
    // 设置物体位置(以X轴为例,Y/Z轴同理)
    obj.transform.position = new Vector3(currentPosX + halfX, 0, 0);
    // 更新下一个物体的起始位置:当前物体总长度 + 间隙
    currentPosX += renderer.bounds.size.x + gap;
}

2. 利用锚点/枢轴对齐

如果物体的枢轴点已经在中心位置,可以直接通过枢轴点的间距来排列,但注意:枢轴点可能和模型实际中心不符,不如包围盒可靠。若要使用,需先将所有物体的枢轴统一到几何中心。

3. 批量布局工具(引擎内置)

很多3D引擎内置了布局工具,比如Unity的Layout Group组件(3D物体也可适配使用),或Blender的Array修改器,通过可视化参数即可实现等间距排列,无需手动写代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:01:24