如何与RealityKit中的3D对象进行交互

时间:2019-07-08 10:05:47

标签: ios swift augmented-reality arkit realitykit

3D对象交互的问题。我发现了RealityKit的一些beta功能,例如PhysicsBodyComponent,applyImpulse,addForce,applyAngularImpulse等。

我试图在对象“花瓶”中添加物理特性,并在出现水龙头或类似事件时使对象产生冲动。

真的很奇怪,在执行命令后,物理特性会正常添加,而脉冲和力不会添加到对象中(请参见下面的调试输出)。

enter image description here

调试打印输出:

  

事物1可选(RealityKit.PhysicsBodyComponent(模式:RealityKit.PhysicsBodyMode.dynamic,massProperties:RealityKit.PhysicsMassProperties(质量:0.2,惯性:SIMD3(0.1,0.1,0.1)),centerOfMass:(位置:SIMD3(0.0,0.0 ,0.0),方向:simd_quatf(真实:1.0,imag:SIMD3(0.0,0.0,0.0))))),材质:RealityKit.PhysicsMaterialResource,isTranslationLocked:(x:false,y:false,z:false),isRotationLocked: (x:false,y:false,z:false),isContinuousCollisionDetectionEnabled:false,传送:false,userForce:SIMD3(0.0,0.0,0.0),userTorque:SIMD3(0.0,0.0,0.0),userLinearImpulse:SIMD3(0.0, 0.0,0.0),userAngularImpulse:SIMD3(0.0,0.0,0.0)))

     

事物5可选(RealityKit.PhysicsBodyComponent(模式:RealityKit.PhysicsBodyMode.dynamic,massProperties:RealityKit.PhysicsMassProperties(质量:0.2,惯性:SIMD3(0.1,0.1,0.1)),centerOfMass:(位置:SIMD3(0.0,0.0 ,0.0),方向:simd_quatf(真实:1.0,imag:SIMD3(0.0,0.0,> 0.0))))),材质:RealityKit.PhysicsMaterialResource,isTranslationLocked:(x:false,y:false,z:false),isRotationLocked :(x:false,y:false,z:false),isContinuousCollisionDetectionEnabled:false,传送:false,userForce:SIMD3(0.0,0.0,0.0),userTorque:SIMD3(0.0,0.0,0.0),userLinearImpulse:SIMD3(0.0 ,0.0,0.0),userAngularImpulse:SIMD3(0.0,0.0,0.0)))

如我们所见,函数不会向对象“花瓶”添加冲力和力。也许我做错了。

1 个答案:

答案 0 :(得分:1)

我认为您不应该直接创建ModelEntity的实例。我认为这是Entity类的内部组件,仅表示网格。您可以直接使用RealityKit中的组件来增强交互/动画。这些适用于整个实体对象。我认为这与创建“金属”视图的方式相似,您需要它得到“核心动画”层的支持才能访问用户交互。

如果您查看SwiftStrike sample application,它们不会直接实例化ModelEntity,这使我相信,在Entity对象之外创建对象不是最佳实践。

我相信您会通过Reality Composer将花瓶添加到项目中。您可以在那里应用材质和碰撞。您还可以添加诸如响应触摸之类的行为。然后,您可以通过Xcode中的Reality Composer文件访问花瓶,并将组件添加到花瓶实体中,这将改变其位置。所有实体都有一个转换组件,记录在here中。

RealityKit感觉像是它旨在从程序员那里抽象出尽可能多的代码,因此许多底层体系结构并未真正公开或记录在案。它也没有按照我的组织方式来组织,但是我对实体-组件设计模式不甚了解。

如果您不喜欢RealityKit的布局,则还可以选择将SceneKit用作渲染器。这样做并不能消除很多功能,而是可以直接在对象上使用Core Animation命令。