Unity Camera Size计算正交摄像机的Size的缩放

这篇博客介绍了如何在C#中计算正交摄像机的Size,并根据屏幕高度和单元格像素进行缩放。通过提供的脚本,可以看到作者使用了`Screen.height`和`pixelToUnity`等变量来动态调整摄像机的正交Size,确保在不同分辨率下保持合适的比例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过Size计算公式(屏幕高度 / 单元格像素)/ 2  、和scale进行缩放功能的计算

该C#脚本只修改图中红框的数值

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

/// <summary>
/// 正交摄像机Size计算
///     挂载在Camera即可
/// </summary>
public class CalcCameraSize : MonoBehaviour
{
    //当前项目的单元格像素大小
    public float pixelToUnity = 100f;
    //比例值
    public float scale;
    //编辑器显示分辨率的高度,我这边使用的是1280*720
    public int displayHeight = 720;

    private void Awake()
    {
        Camera cma = GetComponent<Camera>();
        //摄像机是否正交模式
        if (cma.orthographic)
        {
            //当前设备屏幕的高度   /   编辑器屏幕的高度
            scale = Screen.height / displayHeight;
            //使用对应的缩放
            pixelToUnity *= scale;
            //设置对应的Size
            cma.orthographicSize = (Screen.height / pixelToUnity) / 2;
        }
    }
}
### Unity Android 平台双指手势实现摄像机缩放 为了实现在Android平台上的双指手势控制摄像机缩放,在`Update()`方法中检测两个手指的触摸情况,并据此调整摄像机属性。对于正交视图(Orthographic),修改`orthographicSize`; 对于透视视图(Perspective), 修改`fieldOfView`[^2]。 下面是一个具体的C#脚本示例,该脚本应附加到主摄像机对象上: ```csharp using UnityEngine; public class CameraZoom : MonoBehaviour { private float startDistance; private bool isPinching = false; void Update() { if (Input.touchCount == 2) { Touch touchZero = Input.GetTouch(0); Touch touchOne = Input.getTouch(1); Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition; Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition; float prevMagnitude = (touchZeroPrevPos - touchOnePrevPos).magnitude; float currentMagnitude = (touchZero.position - touchOne.position).magnitude; if (!isPinching && Mathf.Abs(currentMagnitude - prevMagnitude) > 0.1f) { isPinching = true; startDistance = GetComponent<Camera>().orthographicSize * Screen.height / prevMagnitude; } if (isPinching) { float newSize = startDistance * currentMagnitude / Screen.height; // 设置最小最大缩放范围 newSize = Mathf.Clamp(newSize, minSize, maxSize); Camera.main.orthographicSize = newSize; } } else { isPinching = false; } } } ``` 此代码片段展示了如何基于两次触摸的位置变化来动态调整摄像机大小。注意这里的`minSize`和`maxSize`变量应该被定义为允许的最大最小缩放比例,以防止过度拉伸或压缩视野[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值