SCNNode边界大小和缩放

Ale*_*dro 2 ios scenekit

我试图在屏幕上获得节点的大小.这是代码:

var v1 = SCNVector3(x:0, y:0, z:0)
var v2 = SCNVector3(x:0, y:0, z:0)
carNode.getBoundingBoxMin(&v1, max: &v2)
print(v2)

carNode.scale = SCNVector3(0.9, 1.2, 0.5)
//carNode.transform = SCNMatrix4MakeScale(0.9, 1.2, 0.5)

carNode.getBoundingBoxMin(&v1, max: &v2)
print(v2)
Run Code Online (Sandbox Code Playgroud)

但是,getBoundingBoxMin之前和之后返回的值是相同的,就好像没有考虑缩放一样.这是为什么?我需要此信息来为节点上的物理主体设置正确的大小以进行冲突检测,并确定其他节点是否在距离对象的某个范围内.

Hal*_*ler 7

每个SCNBoundingVolume协议参考:

SCNBoundingVolume协议的...方法测量对象的局部坐标空间中对象的位置和大小,表示为框或球体.

缩放节点不会更改其本地坐标空间.所以你得到了正确的结果.

但是,您可能不需要做任何事情.SCNPhysicsShapeScaleKey文档下的注释(在SCNPhysicsShape类引用下:

在模拟碰撞时,SceneKit的物理模拟忽略包含物理实体的节点的比例属性.相反,使用此选项可在创建自定义物理形状时提供比例因子.(如果为节点创建物理主体而未指定自定义形状,则SceneKit会使用节点的scale属性在创建时推断此比例因子.)

因此,如果您的比例因子未自动应用,则会显示(我尚未对其进行测试)将您的比例矢量传递给SCNPhysicsShape.init(node:options:)使用选项键SCNPhysicsShapeScaleKey,您可以执行所需操作.