Проблема с координатами в Math.Clamp

Программирование на Юнити.

Проблема с координатами в Math.Clamp

Сообщение Russkirave 13 июн 2022, 12:40

Здравствуйте!
Пытаясь ограничить угол поворота объекта, использовал метод Math.Clamp, но столкнулся с тем, что он, как я понял, ограничивает угол поворота в мировых координатах, а тк поворачиваемый объект является вложенным, то всё это работает некорректно.
Подскажите, можно ли сделать ограничение поворота по горизонтале относительно направления родительского объекта.
вот код, заранее спасибо:
using UnityEngine;
using System.Collections;

public class RotationGun : MonoBehaviour
{
Quaternion originRotation;
float angleHorizontal;
float angleVertical;
float mouseSens = 10;

private void Start()
{
originRotation = transform.rotation;
}

private void FixedUpdate()
{
angleHorizontal += Input.GetAxis("Mouse X") * mouseSens;
angleVertical += Input.GetAxis("Mouse Y") * mouseSens;

angleVertical = Mathf.Clamp(angleVertical, -60, 60);
angleHorizontal = Mathf.Clamp(angleHorizontal, -60, 60);

Quaternion rotationY = Quaternion.AngleAxis(angleHorizontal, Vector3.up);
Quaternion rotationX = Quaternion.AngleAxis(-angleVertical, Vector3.right);

transform.rotation = originRotation * rotationY * rotationX;
}
}
Russkirave
UNец
 
Сообщения: 2
Зарегистрирован: 13 июн 2022, 12:27

Re: Проблема с координатами в Math.Clamp

Сообщение 1max1 13 июн 2022, 12:54

можно ли сделать ограничение поворота по горизонтале относительно направления родительского объекта.

Не совсем понятно в чем проблема у тебя, в том что тебе нужно отталкиваться от вращение родительского объекта?
Синтаксис:
Используется csharp
originRotation = transform.parent.rotation;

Или от локальных координат дочернего?
Синтаксис:
Используется csharp
originRotation = transform.localRotation;
// upd
transform.localRotation = originRotation * rotationY * rotationX;
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема с координатами в Math.Clamp

Сообщение Russkirave 13 июн 2022, 13:00

1max1 писал(а):
можно ли сделать ограничение поворота по горизонтале относительно направления родительского объекта.

Не совсем понятно в чем проблема у тебя, в том что тебе нужно отталкиваться от вращение родительского объекта?
Синтаксис:
Используется csharp
originRotation = transform.parent.rotation;

Или от локальных координат дочернего?
Синтаксис:
Используется csharp
originRotation = transform.localRotation;
// upd
transform.localRotation = originRotation * rotationY * rotationX;


От локальных коориднат дочернего.
Изменил transform, на твой второй вариант, и всё заработало, как мне нужно. Спасибо)
Russkirave
UNец
 
Сообщения: 2
Зарегистрирован: 13 июн 2022, 12:27


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10