3D对象交互的问题。我发现了RealityKit的一些beta功能,例如PhysicsBodyComponent,applyImpulse,addForce,applyAngularImpulse等。
我试图在对象“花瓶”中添加物理特性,并在出现水龙头或类似事件时使对象产生冲动。
真的很奇怪,在执行命令后,物理特性会正常添加,而脉冲和力不会添加到对象中(请参见下面的调试输出)。
调试打印输出:
事物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)))
如我们所见,函数不会向对象“花瓶”添加冲力和力。也许我做错了。
答案 0 :(得分:1)
我认为您不应该直接创建ModelEntity
的实例。我认为这是Entity
类的内部组件,仅表示网格。您可以直接使用RealityKit
中的组件来增强交互/动画。这些适用于整个实体对象。我认为这与创建“金属”视图的方式相似,您需要它得到“核心动画”层的支持才能访问用户交互。
如果您查看SwiftStrike sample application,它们不会直接实例化ModelEntity
,这使我相信,在Entity
对象之外创建对象不是最佳实践。
我相信您会通过Reality Composer将花瓶添加到项目中。您可以在那里应用材质和碰撞。您还可以添加诸如响应触摸之类的行为。然后,您可以通过Xcode中的Reality Composer文件访问花瓶,并将组件添加到花瓶实体中,这将改变其位置。所有实体都有一个转换组件,记录在here中。
RealityKit感觉像是它旨在从程序员那里抽象出尽可能多的代码,因此许多底层体系结构并未真正公开或记录在案。它也没有按照我的组织方式来组织,但是我对实体-组件设计模式不甚了解。
如果您不喜欢RealityKit的布局,则还可以选择将SceneKit用作渲染器。这样做并不能消除很多功能,而是可以直接在对象上使用Core Animation命令。