2017-01-16 13 views
0

Как и во многих других подобных вопросах, я хочу переместить объект вперед в three.js на основании его поворота. Разница в том, что я не могу использовать object.translateZ. Это потому, что я использую физический симулятор, и это испортится, если я обновлю такой объект. Вот пример fiddle моей проблемы. Не стесняйтесь играть со своей скрипкой и добавляйте свою обновленную версию к своему ответу.Three.js Переместить объект вперед без переводаZ

Я хотел бы, чтобы куб двигался вперед, обновляя mesh.position.x и mesh.position.z на основе mesh.rotation.y.

Чтобы иметь в виду, я иногда понимал, что вращение three.js немного странно, когда вы обращаетесь к ним с помощью mesh.rotation.y.

Спасибо!

ответ

2

Я бы предложил использовать mesh.getWorldDirection(), чтобы получить направление, в котором вы хотите переместить свою сетку. Затем вы можете умножить его на скаляр, чтобы отрегулировать скорость движения.

direction = mesh.getWorldDirection(); 

mesh.position.add(direction.multiplyScalar(moveSpeed)); 

Fiddle: https://jsfiddle.net/k1swrxjr/1/

Успехов!

+1

Сделайте это вместо: 'mesh.getWorldDirection (direction);' Метод создает новый 'Vector3' каждый время, которое оно называется, в противном случае. См. Изменения в https://jsfiddle.net/k1swrxjr/6/ – WestLangley

0

Чтобы переместить ваш меш просто увеличить значение позиции, в которой вы хотите, чтобы ваша сетка идти в анимировать() функцию вместо функции инициализации, следующий пример:

function animate() { 
     mesh.position.x += 0.1; 
     requestAnimationFrame(animate); 
     renderer.render(scene, camera); 
    } 

Этот пример кода будет увеличиваться x вашей сетки на 0,1 при каждом запуске анимации().

+0

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