Существует объект, который физически перемещается в точку (дочерний объект камеры), сам объект без дочерних объектов. Оказывается, персонаж «несет» объект в его руках. Я пытаюсь заставить его вращаться вертикально и горизонтально, ближайший пример: ношение объекта в 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
Сметное вращение объекта в зависимости от направления камеры ⇐ C#
Место общения программистов C#
-
Anonymous
1749625812
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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79661432/offset-object-rotation-depending-on-the-camera-direction[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия