"Quaternion" поворот камеры вокруг объекта.

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

"Quaternion" поворот камеры вокруг объекта.

Сообщение TVGliveone 07 апр 2020, 07:48

Всем привет. Прошу помощи новичку, совсем недавно в Unity на самообучении, книжки читаю, youtube, блоги изучаю, потихоньку двигаюсь вперед, но встал в в ступор в Unity3D. У меня есть сфера за которой двигается камера, камера не дочерний объект к сфере.

Хочу сделать: (Приоритет на Quaternion что бы поворачивать)
- поворот камеры вокруг сфера.
- двигаться по направлению взгляда камеры
(Ничего не получается и поэтому обращаюсь к вам).
Камера двигается, но вокруг своей оси и двигается за сферой(
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraPosition : MonoBehaviour
{
    public GameObject player;
    public float speedRotation;
    private Vector3 positionCam;
    Quaternion positionTrans;

    void Start()
    {
        positionCam = transform.position - player.transform.position;        
    }
    void Update()
    {
        transform.position = positionCam + player.transform.position;
        float mouseX = Input.GetAxis("Mouse X") * speedRotation * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * speedRotation * Time.deltaTime;
        mouseX = Mathf.Clamp(mouseX, -180, 180);
        mouseY = Mathf.Clamp(mouseY, -180, 180);
        transform.rotation *= Quaternion.AngleAxis(mouseX, Vector3.up);
        transform.rotation *= Quaternion.AngleAxis(mouseY, Vector3.up);
    }
}
TVGliveone
UNец
 
Сообщения: 3
Зарегистрирован: 03 апр 2020, 04:20

Re: "Quaternion" поворот камеры вокруг объекта.

Сообщение 1max1 07 апр 2020, 09:44



Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    [SerializeField] Transform sphere;
    [SerializeField] float rIntensity = 10.0f;
    [SerializeField] float mIntensity = 1.0f;

    Vector3 delta;

    void Start()
    {
        delta = transform.position - sphere.position;

        transform.LookAt(sphere);
    }

    void Update()
    {
        float x = Input.GetAxis("Mouse X") * rIntensity;
        float y = Input.GetAxis("Mouse Y") * rIntensity;

        delta = Quaternion.AngleAxis(x, Vector3.up) * delta;
        delta = Quaternion.AngleAxis(y, -transform.right) * delta;

        float scroll = Input.mouseScrollDelta.y;

        if (scroll != 0.0f)
        {
            var newDelta = delta - delta.normalized * scroll * mIntensity;

            if (newDelta.sqrMagnitude > 1.0f)
            {
                delta = newDelta;
            }
        }

        transform.position = sphere.position + delta;

        transform.LookAt(sphere);
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: "Quaternion" поворот камеры вокруг объекта.

Сообщение TVGliveone 07 апр 2020, 12:26

1max1 писал(а):
Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    [SerializeField] Transform sphere;
    [SerializeField] float rIntensity = 10.0f;
    [SerializeField] float mIntensity = 1.0f;

    Vector3 delta;

    void Start()
    {
        delta = transform.position - sphere.position;

        transform.LookAt(sphere);
    }

    void Update()
    {
        float x = Input.GetAxis("Mouse X") * rIntensity;
        float y = Input.GetAxis("Mouse Y") * rIntensity;

        delta = Quaternion.AngleAxis(x, Vector3.up) * delta;
        delta = Quaternion.AngleAxis(y, -transform.right) * delta;

        float scroll = Input.mouseScrollDelta.y;

        if (scroll != 0.0f)
        {
            var newDelta = delta - delta.normalized * scroll * mIntensity;

            if (newDelta.sqrMagnitude > 1.0f)
            {
                delta = newDelta;
            }
        }

        transform.position = sphere.position + delta;

        transform.LookAt(sphere);
    }
}

Блин здорово, спасибо большое.
Только как быть с движением по направлению камеры и сделать ограничения по повороту камеры (не уходить в текстуры).
TVGliveone
UNец
 
Сообщения: 3
Зарегистрирован: 03 апр 2020, 04:20

Re: "Quaternion" поворот камеры вокруг объекта.

Сообщение 1max1 07 апр 2020, 12:59

По первому вопросу гугли "third person controller unity", по второму - https://catlikecoding.com/unity/tutoria ... it-camera/
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 16