【发布时间】:2021-02-18 03:20:53
【问题描述】:
我想在地图上围绕目标对象制作一个旋转相机,第一点我做到了。单击另一个我也想检查的对象后,我的相机不会围绕对象移动和旋转,而是围绕其他点。如何指向我希望相机用鼠标围绕其旋转的对象
LabsManager lab;
public Transform lookCentre;
public Transform lookZRU;
public Vector3 offset;
public float sensitivity; // чувствительность мышки
public float limit; // ограничение вращения по Y
public float zoom; // чувствительность при увеличении, колесиком мышки
public float zoomMax; // макс. увеличение
public float zoomMin; // мин. увеличение
private float X, Y;
bool activeTarget;
void Start()
{
GameObject activ = GameObject.Find("LabsManager");
lab = activ.GetComponent<LabsManager>();
activeTarget = false;
}
void Update()
{
if (lab.LabName == "Осмотр")
{
if (activeTarget == false)
{
CameraPosition(lookCentre);
MouseLook();
}
LookZRU();
}
}
void CameraPosition(Transform target)
{
if (activeTarget == false)
{
transform.position = transform.localRotation * offset + target.position;
}
MouseLook();
}
void MouseLook()
{
if (Input.GetAxis("Mouse ScrollWheel") > 0) offset.z += zoom;
else if (Input.GetAxis("Mouse ScrollWheel") < 0) offset.z -= zoom;
offset.z = Mathf.Clamp(offset.z, -Mathf.Abs(zoomMax), -Mathf.Abs(zoomMin));
if (Input.GetMouseButton(1))
{
X = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivity;
}
if (Input.GetMouseButton(0))
{
Y += Input.GetAxis("Mouse Y") * sensitivity;
}
Y = Mathf.Clamp(Y, -limit, limit);
transform.localEulerAngles = new Vector3(-Y, X, 0);
}
void LookZRU()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.gameObject.GetComponent<SelectZRU>())
{
Debug.Log(gameObject.name + " бла бла");
if (Input.GetKeyDown(KeyCode.R))
{
activeTarget = true;
CameraPosition(lookZRU);
}
}
}
if (activeTarget == true)
{
MouseLook();
}
}
【问题讨论】:
-
您正在寻找的词是“轨道摄像机”;)它使您更容易找到解决方案,也有助于其他人理解您的问题;)