Unity API详解——Camera类

Camera类用来控制游戏中虚拟场景的展示,以左下角为屏幕的(0,0)点坐标,以右上角为屏幕的(camera.pixelWidth,camera.pixelHeight)点坐标。如果用单位化方式表示,则左下角为(0,0)点,右上角为(1,1)点。本博客主要介绍了Camera类的一些实例属性和实例方法,最后对摄像机的视口与aspect、pixelRect及rect之间的关系进行了注解。

一、Camera类实例属性

在Camera类中,涉及的实力属性有aspect、cameraToWorldMatrix、cullingMask、eventMask、layerCullDistances、layerCullSpherical、orthographic、pixelRect、projectionMatrix、rect、renderingPath、targetTexture和worldToCameraMatrix。

1、aspect属性:设置摄像机视口比例

(1)基本语法

public float aspect { get; set; }

(2)功能说明

此属性用于获取或设置Camrea视口的宽高比例值。例如,设camera.aspect=2.0f,则camera视口的宽度/高度=2.0f,但是当硬件显示器屏幕的宽度与高度比例不为2.0f时,视图的显示讲会发生变形。aspect只处理摄像机Camera可以看到的视图的宽高比例,而硬件显示屏的作用只是把摄像机Camera看到的内容显示出来,当硬件显示屏的宽高比例与aspect的比例值不同时,视图讲发生变形

(3)代码实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aspect_demo : MonoBehaviour
{

    void Start()
    {
        //camera.aspect的默认值即为当前硬件的aspect值
        Debug.Log("camera.aspect的默认值" + GetComponent<Camera>().aspect);
    }


    void OnGUI()
    {
        if (GUI.Button(new Rect(10.0f, 10.0f, 200.0f, 45.0f), "aspect=1.0f"))
        {
            //重置当前摄像机的aspect值
            GetComponent<Camera>().ResetAspect();
            GetComponent<Camera>().aspect = 1.0f;
        }
        if (GUI.Button(new Rect(10.0f, 60.0f, 200.0f, 45.0f), "aspect=2.0f"))
        {
            //重置当前摄像机的aspect值
            GetComponent<Camera>().ResetAspect();
            GetComponent<Camera>().aspect = 2.0f;
        }
        if (GUI.Button(new Rect(10.0f, 110.0f, 200.0f, 45.0f), "aspect还原默认值"))
        {
            //重置当前摄像机的aspect值
            GetComponent<Camera>().ResetAspect();
        }
    }
}

Aspect_demo

这段代码中,首先在Start方法中打印出了Camera的默认aspect值,camera.aspect的默认值即为当前硬件的aspect值,若在Unity编辑模式中运行即为Game视图中aspect的值。然后再OnGUI方法中定义了3个Button来切换不同的aspect值,在每次设置新的aspect值之前,都需要先调用ResetAspect方法来重置视口的aspect值。

2、cameraToWorldMatrix属性:变换矩阵

(1)基本语法

public Matrix4x4 cameraToWorldMatrix { get; }

(2)功能说明

此属性的功能室返回从摄像机的局部坐标系到世界坐标系的变换矩阵(只读)

(3)代码实现

Notes:Camera中的forward方向为其自身坐标系的-z轴方向,一般其他GameObject对象的forward方向为自身坐标系的z轴方向

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraToWorldMatrix_demo : MonoBehaviour
{
    void Start()
    {
        Debug.Log("Camera旋转前位置:" + transform.position);
        Matrix4x4 m = GetComponent<Camera>().cameraToWorldMatrix;
        //v3的值为沿着Camera局部坐标系的-z轴方向前移5个单位的位置在世界坐标系中的位置
        Vector3 v3 = m.MultiplyPoint(Vector3.forward * 5.0f);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值