38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
using UnityEngine;
|
||
|
||
/// <summary>
|
||
/// 鼠标控制相机Fov进行镜头方法缩小
|
||
/// </summary>
|
||
public class CameraZoomAndModelMove : MonoBehaviour
|
||
{
|
||
public Camera mainCamera;//主相机
|
||
public Transform model;//验电笔模型
|
||
|
||
//需要自定义模型位置,首先Camera的Fov是60的时候,填写模型的坐标
|
||
public Vector3 startPosition = new Vector3(0.819f, -0.06f, 1.04f); // FOV 60时的位置
|
||
//Camera的Fov是20的时候,填写模型的坐标
|
||
public Vector3 endPosition = new Vector3(0.559f, 0.052f, 2.5f); // FOV 20时的位置
|
||
|
||
private float maxFOV = 60f;
|
||
private float minFOV = 20f;
|
||
|
||
void Update()
|
||
{
|
||
HandleCameraZoom();
|
||
MoveModelBasedOnFOV();
|
||
}
|
||
|
||
private void HandleCameraZoom()
|
||
{
|
||
float scrollInput = Input.GetAxis("Mouse ScrollWheel");
|
||
mainCamera.fieldOfView -= scrollInput * 10f;
|
||
mainCamera.fieldOfView = Mathf.Clamp(mainCamera.fieldOfView, minFOV, maxFOV);
|
||
}
|
||
|
||
private void MoveModelBasedOnFOV()
|
||
{
|
||
float t = Mathf.InverseLerp(maxFOV, minFOV, mainCamera.fieldOfView);
|
||
float nonLinearT = t * t;
|
||
model.localPosition = Vector3.Lerp(startPosition, endPosition, nonLinearT);
|
||
}
|
||
} |