72 lines
2.1 KiB
C#
72 lines
2.1 KiB
C#
![]() |
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using Unity.VisualScripting;
|
|||
|
using UnityEngine;
|
|||
|
using static UnityEngine.GraphicsBuffer;
|
|||
|
|
|||
|
public class PlayerController : MonoBehaviour
|
|||
|
{
|
|||
|
public Camera mainCamera;
|
|||
|
public float rotationSpeed = 5f;
|
|||
|
public float zoomSpeed = 10f;
|
|||
|
public float minFov = 20f;
|
|||
|
public float maxFov = 120;
|
|||
|
|
|||
|
private Vector3 lastMousePosition; public float distance = 5f;
|
|||
|
|
|||
|
// Start is called before the first frame update
|
|||
|
void Start()
|
|||
|
{
|
|||
|
if (mainCamera == null)
|
|||
|
{
|
|||
|
mainCamera = Camera.main;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Update is called once per frame
|
|||
|
void Update()
|
|||
|
{
|
|||
|
HandleRotation();
|
|||
|
|
|||
|
HandleZoom();
|
|||
|
}
|
|||
|
|
|||
|
// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
|||
|
void HandleRotation()
|
|||
|
{
|
|||
|
if (Input.GetMouseButtonDown(0)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
{
|
|||
|
lastMousePosition = Input.mousePosition;
|
|||
|
}
|
|||
|
|
|||
|
if (Input.GetMouseButton(0)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD><D6B0><EFBFBD>״̬ʱ
|
|||
|
{
|
|||
|
Vector3 delta = Input.mousePosition - lastMousePosition; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
float rotX = delta.x * rotationSpeed * Time.deltaTime; // ˮƽ<CBAE><C6BD>ת
|
|||
|
float rotY = -delta.y * rotationSpeed * Time.deltaTime; // <20><>ֱ<EFBFBD><D6B1>ת
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD>
|
|||
|
mainCamera.transform.RotateAround(transform.position, Vector3.up, rotX); // ˮƽ<CBAE><C6BD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
|
|||
|
mainCamera.transform.RotateAround(transform.position, mainCamera.transform.right, rotY); // <20><>ֱ<EFBFBD><D6B1>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
Vector3 direction = (mainCamera.transform.position - transform.position).normalized; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>
|
|||
|
mainCamera.transform.position = transform.position + direction * distance; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕȵ<C7B6><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
|||
|
lastMousePosition = Input.mousePosition; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void HandleZoom()
|
|||
|
{
|
|||
|
float scrollInput = Input.GetAxis("Mouse ScrollWheel");
|
|||
|
if (scrollInput != 0)
|
|||
|
{
|
|||
|
|
|||
|
mainCamera.fieldOfView = Mathf.Clamp(mainCamera.fieldOfView - scrollInput * zoomSpeed, minFov, maxFov);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|