RealKritik
@RealKritik

Как решить проблему с камерой в 2д?

на карте камерой с помощью ПКМ все работает и объект двигается с помощью AWSD (не в те стороны что нужно , но не суть). Нужно сделать чтоб тыкнув ЛКМ по объекту, камера прикреплялась к объекту и двигать объект с камерой, а с помощью кнопки отсоединить камеру.. все это делается норм. А вот некоторые мелочи исправить не получается, это. Если отодвинуть объект с камерой и отсоедениться, то камера возвращается на старое место, если отодвинуть объект подольше от начальной позиции и тыкнуть ЛКМ, то камера прикрепляется хз где . в итоге камера и объект какбудто с разными скоростями чтоли и координаты какбудто начальные в центре есть и все крутится вокруг них, отодвинешь объект очень далеко то вообще бардак.. нужно чтоб прикреплялся везде нормально и отсооединялся на месте объекта, а не улетала в начало. может в 3д проблема?! уже устал перепробывать все подряд (
два кода (хихи):
using UnityEngine;

public class CameraController : MonoBehaviour
{
    public static CameraController instance;

    public Transform followTransform;

    public Transform cameraTransform;

    public float movementTime;
    public Vector3 newPosition;

    public Vector3 dragStartPosition;
    public Vector3 dragCurrentPosition;

    void Start()
    {
        instance = this;

        newPosition = transform.position;
    }

    void Update()
    {
        if (followTransform != null) 
        {
            transform.position = followTransform.transform.position + newPosition;
        }
        else
        {
            HandleMouseInput();

        }
        if (Input.GetKeyDown(KeyCode.G))
        {
           followTransform = null;
           
        }
    }

    void HandleMouseInput()
    {

        if (Input.GetMouseButtonDown(1))
        {
            Plane plane = new Plane(Vector3.forward, Vector3.right);

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            float entry;
            if(plane.Raycast(ray, out entry))
            {
                dragStartPosition = ray.GetPoint(entry);
            }
        }
        if (Input.GetMouseButton(1))
        {
            Plane plane = new Plane(Vector3.forward, Vector3.right);

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            float entry;
            if (plane.Raycast(ray, out entry))
            {
                dragCurrentPosition = ray.GetPoint(entry);

                newPosition = transform.position + dragStartPosition - dragCurrentPosition;
            }

        }
        transform.position = Vector3.Lerp(transform.position, newPosition, Time.deltaTime * movementTime);
    }
}

==================
using UnityEngine;

public class Motorcycle : MonoBehaviour
{
    public void OnMouseDown()
    {
    CameraController.instance.followTransform = transform;
    }
}
  • Вопрос задан
  • 24 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы