我正在基于this three.js pointerlock example
创建一个小型多人游戏我需要在实际玩家屏幕上旋转敌人头像,这样他才能看到他们正在看的方向,但我无法弄清楚如何正确地做到这一点
目前,每个敌人都将一个物体的位置和旋转发送到服务器
{
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;
但只有位置有效,旋转不正常:生成的旋转轴似乎是反转的,它们也会根据实际玩家的方向而变化
修改
我也尝试过克隆"它与here
所述的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
}
但轮换仍然错误
答案 0 :(得分:0)
我意识到我可以用这种方式将对象旋转到指针锁定方向:
var dir = controls.getDirection(new THREE.Vector3());
var dis = 100;
mesh.lookAt({x:d.x * dis, y:d.y * dis, z:d.z * dis});
所以我可以让敌人发送他们的 dir 而不是旋转,然后让他们看看那个方向上的一个小的 dis tance。