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});
поэтому я могу заставить врагов направлять свое направление вместо вращения, а затем заставлять их смотреть на небольшое расстояние в этом направлении.