Камера Unity вращается вокруг объекта - PullRequest
0 голосов
/ 30 августа 2018

В моем проекте у меня есть 1 скрипт, 1 камера и 1 объект. Я написал код (см. Ниже), который будет вращать камеру вокруг объекта, но ось X не всегда влево и вправо, а ось Y не всегда вверх и вниз.

Что я имею в виду под этим, если, например, мы загружаем в единицу с осью камеры Y = вверх, X = влево, Z вперед в качестве позиции преобразования и объект, имеющий ту же ориентацию, что и камера. Я могу щелкнуть и перетащить влево или вправо / вверх или вниз, и камера будет правильно вращаться вместе с ней, но как только я поверну ее на 90 градусов в любом направлении, противоположная ось не будет вращаться так, как я этого хочу.

Я знаю, что есть термин для этого "идеального вращения", но я не знаю этого термина, поэтому мне очень трудно объяснить. Сожалею. Пожалуйста, не стесняйтесь вводить код в скрипт C # и поиграть с ним. добавьте сценарий к камере, убедитесь, что камера смотрит на объект, и объект необходимо добавить к игровому объекту в сценарии.

Может кто-нибудь помочь мне, чтобы, когда я проведу пальцем влево, объект всегда будет вращаться влево, вправо, вправо, вверх, вверх и вниз, вниз.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FocusObject : MonoBehaviour
{

    public GameObject target;//the target object
    private Vector3 point;//the coord to the point where the camera looks at

    float f_lastX = 0.0f;
    float f_difX = 0.0f;  
    float f_lastY = 0.0f;
    float f_difY = 0.0f;  


    void Start()
    {//Set up things on the start method
        point = target.transform.position;//get target's coords
        transform.LookAt(point);//makes the camera look to it 
    }

    void Update()
    {

        if (Input.GetMouseButtonDown(0))
        {
            f_difX = 0.0f;
            f_difY = 0.0f;
        }
        else if (Input.GetMouseButton(0))
        {
            f_difX = Mathf.Abs(f_lastX - Input.GetAxis("Mouse X"));
            f_difY = Mathf.Abs(f_lastY - Input.GetAxis("Mouse Y"));

            if (f_lastX < Input.GetAxis("Mouse X"))
            {
                transform.RotateAround(point, new Vector3(0.0f, 1.0f, 0.0f), f_difX);
            }

            if (f_lastX > Input.GetAxis("Mouse X"))
            {
                transform.RotateAround(point, new Vector3(0.0f, -1.0f, 0.0f), f_difX);
            }

            if (f_lastY < Input.GetAxis("Mouse Y"))
            {
                transform.RotateAround(point, new Vector3(1.0f, 0.0f, 0.0f), f_difY);
            }

            if (f_lastY > Input.GetAxis("Mouse Y"))
            {
                transform.RotateAround(point, new Vector3(-1.0f, 0.0f, 0.0f), f_difY);

            }

            f_lastX = -Input.GetAxis("Mouse X");
            f_lastY = -Input.GetAxis("Mouse Y");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...