Примените постоянную силу к узлу SCN с помощью sceneKit

Используя ARKit и SceneKit, я пытаюсь создать модель дрона.

на данный момент я могу успешно разместить дрон над поверхностью, смоделировать столкновение и обнаружить контакт между базой и дроном.

Текущая ситуация

Теперь я хотел бы попробовать управлять этим дроном, приложить постоянную силу! (Я не хочу просто перемещать ось Y, чтобы поднять дрон), но я хочу имитировать силу, тянущую его вверх, как это происходит в реальной жизни.

Я начал писать код и вызывать этот метод, как только нажимаю кнопку «вверх».

// hit test and find object with specific name
    func applyForceToDrone() {
        print("tapped apply force drone at position ")
        
        let nodo = arrayDrone[0] // return the scnNode of the Drone in the scene
        let force = SCNVector3(0, 15, 0)
        
        print("appply force")
        nodo.physicsBody?.applyForce(force, asImpulse: false)
            
        
    }

Результатом этого кода является то, что дрон прыгает вверх и вниз каждый раз, когда я нажимаю кнопку «вверх». но эту силу нужно прикладывать постоянно во времени...

Как я могу постоянно прикладывать силу, чтобы удерживать дрон в воздухе? любые советы, как я могу подойти к этой проблеме...

Я не могу найти ни одного примера, где к объекту применяется постоянная сила.

Спасибо за помощь.


person Damiano Miazzi    schedule 17.02.2021    source источник
comment
Честно говоря, я не могу сказать вам, почему он прыгает только вверх и вниз. Я также использовал эту команду applyForce для некоторых объектов в одном из моих приложений, но мне нужно было наоборот, установив asImpulte = true. На этом этапе вы можете столкнуться с некоторыми проблемами. Объекты, содержащие динамическое физическое тело, не должны перемещаться ни с чем, кроме движка SCNPhysics. Поэтому, если вы хотите, чтобы ваш дрон летал и контролировал направления, вам понадобится другой подход. В примере игры FOX от Apple вы можете найти некоторый подход к управлению персонажем. Представьте то же самое для вашего дрона, но в ARKit. Он использует кинематическое тело.   -  person ZAY    schedule 17.02.2021


Ответы (1)


Вы должны применить силу внутри одной из функций цикла. Для этого определите переменную var applyForce=false. Затем, например, при касании buttonUp установите applyForce=true, при завершении касания установите applyForce=false. Затем функция внутреннего цикла: если applyForce, то примените силу. Вы должны настроить количество силы. Также вы можете добавить дополнительные параметры.

person xaled    schedule 15.03.2021