Попытка настроить движение игрока FPS путем преобразования XYZ object_level в Spark AR - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь настроить движение игрока путем преобразования нулевых объектов в иерархии level_object

У меня есть иерархия NullObj: RotationPivot> NullObj: PositionPivot> level_object. Вращение является первым, потому что даже если уровень перемещается по XYZ - игрок все еще может перемещать уровень вокруг камеры по Y координатам с помощью сценария, подобного следующему:

const timeDriver = Animation.timeDriver({
    durationMilliseconds: 3000,
    loopCount: Infinity,
    mirror: false
});

const right_direction = Animation.samplers.linear(0, 2 * Math.PI);
var right = Animation.animate(timeDriver, right_direction);


var inputLeft = p.getBooleanValue('inputLeft');
var inputRight = p.getBooleanValue('inputRight');
var inputIdle = p.getBooleanValue('inputIdle');


inputLeft.monitor().subscribe(function (e) {
    if (e.newValue)
        timeDriver.reverse();
});

inputRight.monitor().subscribe(function (e) {
    if (e.newValue)
        rotation.transform.rotationY = right
        timeDriver.start();
});

inputIdle.monitor().subscribe(function (e) {
    if (e.newValue)
        timeDriver.stop();
});

Но у меня есть проблема с перемещением - мне нужно взять последний Значение вращение.transform.rotationY.pinLastValue () и дать это значение как вектор, чтобы переместить поворот позиции по координатам XZ, чтобы игрок мог двигаться вперед / назад. Сейчас мой код выглядит следующим образом, но я не могу найти решение, как соединить Y одной координаты (RotationPivot) и преобразовать в вектор движения (PositionPivot) (((

Пожалуйста, помогите! Я думаю о lookAt, На данный момент я не знаю, как использовать их для решения моей проблемы (

//direction - is a PositionPivot
var x = direction.transform.x.pinLastValue() 
var z = direction.transform.z.pinLastValue()
var RotY = rotation.transform.rotationY.pinLastValue()
//direction.transform.rotationY = RotY
var xz = x && z
var Yxz = rotation.vector(0, RotY, 0)

//point.transform.rotationY = r.lookAt(planeS.transform.lookAt(target.transform.position), target.transform.position).rotationY;

const forward_direction = Animation.samplers.linear(xz, Infinity);
var forward = Animation.animate(forwardDriver, forward_direction);

var goForward = p.getBooleanValue('goForward');
var goBackward = p.getBooleanValue('goBackward');
var stayIdle = p.getBooleanValue('stayIdle');

goBackward.monitor().subscribe(function (e) {
    if (e.newValue)
        forwardDriver.reverse();
});

goForward.monitor().subscribe(function (e) {
    if (e.newValue)
        direction.transform.z = r.mix(xz, Yxz, forward)
        direction.transform.x = r.mix(xz, Yxz, forward)
        forwardDriver.start();
});

stayIdle.monitor().subscribe(function (e) {
    if (e.newValue)
        forwardDriver.stop();
});
).
...