В моем проекте у меня есть 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");
}
}
}