three.js указатель блокировки многопользовательского вращения врагов не работает должным образом

Я создаю небольшую многопользовательскую игру на основе этого примера

Мне нужно вращать аватары врагов на экране самого игрока, чтобы он мог видеть направление, в котором они смотрят, но я не могу понять, как это правильно сделать.

В настоящий момент каждый враг отправляет объект со своей позицией и ротацией на сервер.

{
    position: controls.getObject().position,            
    rotation: controls.getDirection(new THREE.Vector3())
}

сервер получает его и отправляет реальному игроку, который с помощью функции выбирает соответствующий вражеский мец (аватар) на карте и применяет к нему положение / поворот

var object = scene.getObjectByName(data.player);

object.position.x = data.position.x;
object.position.y = data.position.y;
object.position.z = data.position.z;

object.rotation.x = data.rotation.y;
object.rotation.y = data.rotation.x;
object.rotation.z = data.rotation.z;

Но работает только позиция, вращение не работает должным образом: результирующие оси вращения кажутся инвертированными, и они также меняются в зависимости от направления, на которое смотрит настоящий игрок


Редактировать:

Я пытался также "клонировать" его в другую камеру с другим rotation.order как описано здесь

var camera2 = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);
camera2.rotation.order = 'YXZ';
var yawObject = controls.getObject();
var pitchObject = yawObject.children[0];
camera2.rotation.set(pitchObject.rotation.x, yawObject.rotation.y, 0);

и заставляя врагов посылать

{
    position: controls.getObject().position,            
    rotation: camera2.rotation
}

но вращение все еще неправильно

1 ответ

Я понял, что могу вращать объекты в направлении блокировки указателя следующим образом:

var dir = controls.getDirection(new THREE.Vector3());
var dis = 100;
mesh.lookAt({x:d.x * dis, y:d.y * dis, z:d.z * dis});

поэтому я могу заставить врагов направлять свое направление вместо вращения, а затем заставлять их смотреть на небольшое расстояние в этом направлении.

Другие вопросы по тегам