Задать вопрос
@ivangrrrr
школьник, недавно начал изучать Unity и C#

Как вращать объект относительно локальных координат?

У меня есть пушка, которая должна вращаться горизонтально, вокруг своей оси. Это я как-то смог реализовать, но когда транспорт, на котором она стоит, заезжает на неровность, она сохраняет свое горизонтально положение, а должна повторять положение транспорта.

5ff5bb7b56ec0652633950.png

5ff5bb8a20e90309501646.png

Вот код:
public class TowerControll : MonoBehaviour
{
    public LayerMask maskObstacles;

    [SerializeField]
    private Transform tower, gun;

    [Range(0, 5)]
    public float rotSpeed = 1.5f;
    [Range(0, 5)]
    public float rotSpeedGun = 1.5f;

    public int angleDown, angleUp;

    private float _rotY, _rotX;
    private Vector3 _offset;

    private void Start()
    {
        _rotY = transform.eulerAngles.y;
        _rotX = transform.eulerAngles.x;

        _offset = tower.position - transform.position;
    }


    private void LateUpdate()
    {

        _rotY += Input.GetAxis("Mouse X") * rotSpeed * 3;
        _rotX += Input.GetAxis("Mouse Y") * rotSpeedGun * 3;

        _rotX = Mathf.Clamp(_rotX, -angleDown, angleUp);

        Quaternion rotation = Quaternion.Euler(0f, _rotY, 0f);
        Quaternion rotationGun = Quaternion.Euler(-_rotX, _rotY, 0f);


        gun.rotation = rotationGun;
        tower.rotation = rotation;
        transform.position = tower.position - (rotationGun * _offset);
        transform.LookAt(tower);


        RaycastHit hit;
        if (Physics.Raycast(tower.position, transform.position - tower.position, out hit, Vector3.Distance(transform.position, tower.position), maskObstacles))
        {
            transform.position = hit.point;
            transform.LookAt(tower);
        }
    }
}
  • Вопрос задан
  • 238 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы