37 lines
1.2 KiB
C#
37 lines
1.2 KiB
C#
|
using UnityEngine;
|
||
|
|
||
|
public class CameraAdjuster : MonoBehaviour
|
||
|
{
|
||
|
public Camera modelCamera; // 3D模型的摄像机
|
||
|
public Transform modelTransform; // 3D模型的 Transform
|
||
|
public float padding = 1.2f; // 额外边距,防止模型太贴近边界
|
||
|
|
||
|
void Start()
|
||
|
{
|
||
|
AdjustCameraToFitModel();
|
||
|
}
|
||
|
|
||
|
public void AdjustCameraToFitModel()
|
||
|
{
|
||
|
if (modelTransform == null || modelCamera == null) return;
|
||
|
|
||
|
Renderer modelRenderer = modelTransform.GetComponentInChildren<Renderer>();
|
||
|
if (modelRenderer == null) return;
|
||
|
|
||
|
Bounds bounds = modelRenderer.bounds; // 获取模型的包围盒
|
||
|
float modelSize = Mathf.Max(bounds.size.x, bounds.size.y, bounds.size.z); // 取最大的尺寸
|
||
|
|
||
|
if (modelCamera.orthographic) // 正交投影
|
||
|
{
|
||
|
modelCamera.orthographicSize = (modelSize / 2) * padding;
|
||
|
}
|
||
|
else // 透视投影
|
||
|
{
|
||
|
float distance = modelSize / (2 * Mathf.Tan(modelCamera.fieldOfView * 0.5f * Mathf.Deg2Rad));
|
||
|
modelCamera.transform.position = bounds.center - modelCamera.transform.forward * distance * padding;
|
||
|
}
|
||
|
|
||
|
modelCamera.transform.LookAt(bounds.center); // 让摄像机对准模型中心
|
||
|
}
|
||
|
}
|