1

我正在基于这个 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
}

但旋转仍然是错误的

4

1 回答 1

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});

所以我可以让敌人发送他们的方向而不是旋转,然后让他们朝那个方向看一小段距离

于 2016-12-07T07:24:10.050 回答