我已经在Reality Composer中构建了一个场景,其中有一个球开始在空中漂浮。我试图通过编程的方式扔球,同时旋转它。我试图通过Reality Composer中的行为来实现这一点,但无法同时让两个行为工作,而且,一旦我开始动画,球就会立即福尔斯地上。我的第二次尝试是放弃行为路线,我试图以编程方式做到这一点,但我不能添加一个力,因为加载的球是一个实体,而不是一个ModelEntity。我做错了什么?我想旋转球,同时施加力和重力。
mwg9r5ms1#
要添加力,您需要实体符合HasPhysicsMotion。要查看从RC导入的实体是否可以对其应用力,请检查(myEntity as?HasPhysics)返回nil或一个值。如果返回nil,创建你自己的实体子类,它有HasPhysics协议,并将你的实体设置为它的子实体。如果你想让它与场景中的其他东西发生碰撞,那么你也需要HasCollision协议。你所说的一切,都可以从这一点上实现!
hvvq6cgz2#
使用以下代码创建一个符合RealityKit物理协议的自定义类Physics(用于控制质量、速度和运动学/动力学模式)。以下是物理协议的符合层次结构:
Physics
HasPhysics: HasPhysicsBody, HasPhysicsMotion | |- HasCollision: HasTransform
这里有一个代码:
import ARKit import RealityKit class Physics: Entity, HasPhysicsBody, HasPhysicsMotion { required init() { super.init() self.physicsBody = PhysicsBodyComponent(massProperties: .default, material: nil, mode: .kinematic) self.physicsMotion = PhysicsMotionComponent(linearVelocity: [0.1, 0, 0], angularVelocity: [1, 3, 5]) } }
然后在ViewController中创建该类的示例:
class ViewController: UIViewController { @IBOutlet var arView: ARView! override func viewDidLoad() { super.viewDidLoad() let physics = Physics() arView.backgroundColor = .darkGray let boxAnchor = try! Experience.loadBox() boxAnchor.steelBox?.scale = [5, 5, 5] let boxEntity = boxAnchor.children[0].children[0].children[0] boxEntity.name = "CUBE" print(boxEntity) let kinematicComponent: PhysicsBodyComponent = physics.physicsBody! let motionComponent: PhysicsMotionComponent = physics.physicsMotion! boxEntity.components.set(kinematicComponent) boxEntity.components.set(motionComponent) arView.scene.anchors.append(boxAnchor) } }
另外,看看这篇文章,了解如何在没有自定义Physics类的情况下实现物理。
mec1mxoz3#
为了澄清,如果你在Reality Composer文件中设置了实体参与物理。然后你就可以
(myEntity as? HasPhysics)?.addForce(SIMD3(x: 0, y: 0, z: 1), relativeTo: myEntity.parent)
3条答案
按热度按时间mwg9r5ms1#
要添加力,您需要实体符合HasPhysicsMotion。要查看从RC导入的实体是否可以对其应用力,请检查(myEntity as?HasPhysics)返回nil或一个值。
如果返回nil,创建你自己的实体子类,它有HasPhysics协议,并将你的实体设置为它的子实体。如果你想让它与场景中的其他东西发生碰撞,那么你也需要HasCollision协议。
你所说的一切,都可以从这一点上实现!
hvvq6cgz2#
使用以下代码创建一个符合RealityKit物理协议的自定义类
Physics
(用于控制质量、速度和运动学/动力学模式)。以下是物理协议的符合层次结构:
这里有一个代码:
然后在ViewController中创建该类的示例:
另外,看看这篇文章,了解如何在没有自定义
Physics
类的情况下实现物理。mec1mxoz3#
为了澄清,如果你在Reality Composer文件中设置了实体参与物理。然后你就可以