Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何旋转并向从Reality Composer加载的实体添加线性力?_Swift_Augmented Reality_Arkit_Realitykit_Reality Composer - Fatal编程技术网

Swift 如何旋转并向从Reality Composer加载的实体添加线性力?

Swift 如何旋转并向从Reality Composer加载的实体添加线性力?,swift,augmented-reality,arkit,realitykit,reality-composer,Swift,Augmented Reality,Arkit,Realitykit,Reality Composer,我已经构建了一个场景在现实中作曲家,有一个球,开始在空中漂浮的场景。我试图通过编程在旋转球的同时抛出球 我试图通过“现实作曲家中的行为”来实现这一点,但无法使两种行为同时工作,而且,一旦我开始动画,球会立即落到地上 我的第二次尝试是放弃行为路线,我试图通过编程实现这一点,但我无法添加力,因为加载的球是一个实体而不是一个模型实体。我做错了什么 我想旋转球,同时施加一个力并启用重力。要添加一个力,您需要实体符合HasPhysicsMotion。要查看从RC导入的实体是否可以对其应用力,请检查(myE

我已经构建了一个场景在现实中作曲家,有一个球,开始在空中漂浮的场景。我试图通过编程在旋转球的同时抛出球

我试图通过“现实作曲家中的行为”来实现这一点,但无法使两种行为同时工作,而且,一旦我开始动画,球会立即落到地上

我的第二次尝试是放弃行为路线,我试图通过编程实现这一点,但我无法添加力,因为加载的球是一个实体而不是一个模型实体。我做错了什么


我想旋转球,同时施加一个力并启用重力。

要添加一个力,您需要实体符合HasPhysicsMotion。要查看从RC导入的实体是否可以对其应用力,请检查(myEntity as?HasPhysics)是否返回nil或值

如果返回nil,则创建您自己的实体子类,该子类具有HasPhysics协议,并将您的实体设置为它的子类。如果希望它与场景中的其他对象发生碰撞,则还需要HASCALLISION协议


你提到的所有事情都可以从这一点上实现

使用以下代码创建符合RealityKit物理协议(用于控制质量、速度和运动学/动力学模式)的自定义类
Physical

以下是物理协议的一致性层次结构:

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)
    }
}


另外,请查看以了解如何在没有自定义
物理
类的情况下实现物理



谢谢你的帮助,安迪。