zhanshi/Assets/PlayerController.cs

72 lines
2.1 KiB
C#
Raw Permalink Normal View History

2024-12-18 19:07:19 +08:00
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);
}
}
}