Я пытаюсь настроить движение игрока путем преобразования нулевых объектов в иерархии 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();
});
).