Страница 1 из 1

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

СообщениеДобавлено: 07 апр 2020, 07:48
TVGliveone
Всем привет. Прошу помощи новичку, совсем недавно в 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);
    }
}

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

СообщениеДобавлено: 07 апр 2020, 09:44
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);
    }
}

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

СообщениеДобавлено: 07 апр 2020, 12:26
TVGliveone
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);
    }
}

Блин здорово, спасибо большое.
Только как быть с движением по направлению камеры и сделать ограничения по повороту камеры (не уходить в текстуры).

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

СообщениеДобавлено: 07 апр 2020, 12:59
1max1
По первому вопросу гугли "third person controller unity", по второму - https://catlikecoding.com/unity/tutoria ... it-camera/