1

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(real: 1.0, imag: SIMD3(0.0, 0.0, 0.0)))), 材质: RealityKit.PhysicsMaterialResource, isTranslationLocked: (x: false, y: false, z: false), isRotationLocked: (x:假,y:假,z:假),isContinuousCollisionDetectionEnabled:假,传送:假,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(real: 1.0, imag: SIMD3(0.0, 0.0, >0.0)))), material: RealityKit.PhysicsMaterialResource, isTranslationLocked: (x: false, y: false, z: false), isRotationLocked: (x :假,y:假,z:假),isContinuousCollisionDetectionEnabled:假,传送:假,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)))

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

4

1 回答 1

1

我不认为你应该ModelEntity直接创建实例。我认为这是Entity仅代表网格的类的内部组件。您可以直接使用RealityKit. 这些适用于整个实体对象。我认为这类似于创建 Metal 视图的方式,您需要它由 Core Animation 层支持才能访问用户交互。

如果您查看SwiftStrike 示例应用程序,它们不会直接实例化,这让我相信在对象ModelEntity之外创建它们不是最佳实践。Entity

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

RealityKit 感觉它的设计目的是尽可能多地从程序员那里抽象出代码,因此许多底层架构并没有真正公开或记录。它也没有按照我的组织方式进行组织,但是我对实体组件设计模式不太熟悉。

如果您不喜欢 RealityKit 的布局方式,您还可以选择使用 SceneKit 作为渲染器。这并没有抽象出尽可能多的功能,并允许您直接在对象上使用核心动画命令。

于 2019-07-30T18:48:24.433 回答