C# 相机变焦
我正在努力使用Lerp来平滑我的相机变焦。下面的代码是我编写的用于放大和缩小相机的代码片段。我知道我应该在C# 相机变焦,c#,unity3d,C#,Unity3d,我正在努力使用Lerp来平滑我的相机变焦。下面的代码是我编写的用于放大和缩小相机的代码片段。我知道我应该在 transform.position = cameraTarget.position - (transform.rotation * Vector3.forward * distance); 在LateUpdate功能中,但我一辈子都无法找出我的错误所在 public class CameraController : MonoBehaviour { [SerializeField
transform.position = cameraTarget.position - (transform.rotation * Vector3.forward * distance);
在LateUpdate功能中,但我一辈子都无法找出我的错误所在
public class CameraController : MonoBehaviour
{
[SerializeField] private Transform cameraTarget;
[SerializeField] private Transform cameraMain;
[Header("Distance from camera to target")]
public float minDistance = 6;
public float maxDistance = 20;
public float distance = 20;
[Header("Zoom and scroll variables")]
public KeyCode scrollButton = KeyCode.Mouse2;
[Range(0.5f, 1.5f)] public float zoomSpeed = 1;
[Range(0.5f, 1.5f)] public float rotationSpeed = 1;
public float xMinAngle = 25;
public float xMaxAngle = 80;
void LateUpdate()
{
if (!cameraTarget) return;
CameraZoom();
transform.position = cameraTarget.position - (transform.rotation * Vector3.forward * distance);
}
private void CameraZoom()
{
//Add a lerp function to smooth the zoom
float step = GetAxisRawScrollUniversal() * zoomSpeed;
distance = Mathf.Clamp(distance - step, minDistance, maxDistance);
}
public static float GetAxisRawScrollUniversal()
{
float scroll = Input.GetAxisRaw("Mouse ScrollWheel");
if (scroll < 0) return -1;
if (scroll > 0) return 1;
return 0;
}
}
公共类CameraController:MonoBehavior
{
[SerializeField]专用转换摄像机目标;
[SerializeField]专用转换摄像机;
[标题(“从摄像机到目标的距离”)]
公众漂浮距离=6;
公共浮点数maxDistance=20;
公共浮动距离=20;
[标题(“缩放和滚动变量”)]
public KeyCode scrollButton=KeyCode.Mouse2;
[范围(0.5f,1.5f)]公共浮动缩放速度=1;
[范围(0.5f,1.5f)]公共浮子旋转速度=1;
公共浮动Xminagle=25;
公共浮点数xMaxAngle=80;
void LateUpdate()
{
如果(!cameraTarget)返回;
CameraZoom();
transform.position=摄像机目标位置-(transform.rotation*矢量3.forward*距离);
}
私人空位CameraZoom()
{
//添加lerp函数以平滑缩放
float step=GetAxisRawScrollUniversal()*缩放速度;
距离=数学夹具(距离-步长、minDistance、maxDistance);
}
公共静态浮点GetAxisRawScrollUniversal()
{
float scroll=Input.GetAxisRaw(“鼠标滚轮”);
如果(滚动<0)返回-1;
如果(滚动>0)返回1;
返回0;
}
}
定义一个zoomLerpFactor
字段,然后使用Vector3.Lerp
从当前位置转到您将设置为transform.position
的位置
[Range(0f, 1f)] public float zoomLerpFactor = 0.3f;
请注意,单独使用Lerp
可能无法保证位置等于目标位置。因此,您可能只需要设置transform.position=goalPosition代码>如果“足够近”
Vector3 goalPosition = cameraTarget.position
- (transform.rotation * Vector3.forward * distance);
transform.position = Vector3.Lerp(transform.position, goalPosition, zoomLerpFactor);