Сметное вращение объекта в зависимости от направления камерыC#

Место общения программистов C#
Ответить
Anonymous
 Сметное вращение объекта в зависимости от направления камеры

Сообщение Anonymous »

Существует объект, который физически перемещается в точку (дочерний объект камеры), сам объект без дочерних объектов. Оказывается, персонаж «несет» объект в его руках. Я пытаюсь заставить его вращаться вертикально и горизонтально, ближайший пример: ношение объекта в Zelda Tok. Но я не понимаю, как правильно рассчитать этот вращение. Т.е. Повернут на оси U на 90 градусов - попробуйте повернуть на оси x - объект вращается не от камеры на глубину, а слева направо < /p>
ItemInArmTransform.localRotation = Quaternion.Lerp(ItemInArmTransform.localRotation, Quaternion.Euler(_currentAngleOffset.x, _currentAngleOffset.y, 0), _rotSpeed * Time.deltaTime);
< /code>
Если вы поворачиваете объект в координатах камеры или точки рук, используя Quaternion.angleaxis, то когда вы поворачиваете камеру, например, на 90 градусов вдоль оси y - объект переворачивается, потому что его оси x изменяется »с осью z. Т.е. Если на оси x было вращение на 45 градусов - будет на оси Z на 45 градусов, фактически, дальнейшее изменение изменений вращения, ожидаемого, но сам объект переворачивается на 90 градусов, что ясно видно, если вы используете LERP или асимметрично любую модель.var vertQuat = Quaternion.AngleAxis(_currentAngleOffset.x, ArmPointTransform.right);
var horQuat = Quaternion.AngleAxis(_currentAngleOffset.y, ArmPointTransform.up);

ItemInArmTransform.rotation = Quaternion.Lerp(ArmPointTransform.rotation, ArmPointTransform.rotation * vertQuat * horQuat, _rotSpeed * Time.deltaTime);
< /code>
Компоненты и вход < /p>
[field: SerializeField] public Transform ArmPointTransform { get; private set; }
public Transform ItemInArmTransform { get; private set; }

// Vector of rotation
private Vector3 _currentAngleOffset;

private void RotateVerticlal()
{
var value = _playerInput.PlayerInput.ArmPlaced.RotationVertical.ReadValue();
if (value == 0) return;

_currentAngleOffset.x += Math.Sign(value) * _angleRotStep;
_currentAngleOffset.x %= 360;
}

private void RotateLeft(InputAction.CallbackContext context)
{
_currentAngleOffset.y += _angleRotStep;
_currentAngleOffset.y %= 360;
}

private void RotateRight(InputAction.CallbackContext context)
{
_currentAngleOffset.y -= _angleRotStep;
_currentAngleOffset.y %= 360;
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... -direction
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»