#3d #game-physics #scenekit
#3D #игра-физика #scenekit
Вопрос:
После того, как узел (автомобиль) сталкивается с препятствием типа «ускорение», он должен ускориться. Вместо этого он замедляется и начинает отклоняться от прямой линии. Я проверил, правильно ли выполнен код, и я предполагаю, что проблема связана с системой координат узла или чем-то подобным.
На SceneKit
рисунке ось y представляет ось, направленную вверх, и в моем случае все происходит на плоскости, ось x указывает направление движения автомобилей, а ось z — направление движения влево / вправо.
До и после изменения скорости я распечатываю ее скорость с помощью этого кода:
print(car.physicsBody?.velocity)
car.physicsBody?.velocity.x = 0.2
print(car.physicsBody?.velocity)
Вывод:
SCNVector3(x: 0.245669901, y: -0.120455861, z: 0.119086474) and
SCNVector3(x: 0.445669889, y: -0.120455861, z: 0.119086474).
Таким образом, компонент x автомобиля увеличивается, но не заставляет его двигаться в желаемом направлении. Как я уже сказал, рентгеновский снимок мира указывает в направлении, в котором я хочу, чтобы машина продолжала двигаться. Автомобиль также движется в правильном направлении до увеличения скорости.
Я хочу понять, почему увеличение скорости автомобиля замедляет его и почему это иногда заставляет его слегка перемещаться вправо / влево, как будто вектор скорости не применяется в том же положении, что и раньше.
Я пытался применить силу в центре автомобиля раньше, с помощью этого кода:
car.physicsBody?.applyForce(SCNVector3(0.2, 0, 0), at: car.presentation.position, asImpulse: true)
и этот код (без применения в позиции):
car.physicsBody?.applyForce(SCNVector3(0.2, 0, 0), asImpulse: true),
но они оба привели к схожему странному поведению автомобиля.
Я делаю что-то не так? Что еще я могу попробовать?
Ответ №1:
Я не знаком со SceneKit. Но если вы добавляете значение к компоненту вектора без изменения других компонентов, то направление вектора меняется.
Если вы хотите удлинить вектор на определенный коэффициент без изменения его направления, вам нужно умножить все компоненты на этот коэффициент.
Ответ №2:
Скорость автомобиля уменьшается после столкновения с «препятствием ускорения», потому что я забыл отключить столкновения между этими двумя объектами. Таким образом, при столкновении автомобиль потерял часть своей кинетической энергии, что заставило его замедлиться.