Camera.main
返回主摄像机的Camera组件
第一个启用的标签为“MainCamera”的摄像机(只读)。
场景中的主要摄像机。如果场景中没有这样的摄像机,则返回null。此属性在内部使用FindGameObjectsWithTag,并且不缓存结果,建议缓存相机的返回值。
Camera.main等同于GameObject.Find("MainCamera").GetComponent<Camera>()
Camera.ScreenPointToRay
把屏幕上的点转换为一个射线
返回从摄像机通过屏幕点的射线。
得到的射线在世界空间中,从相机的近平面开始,经过屏幕上的(x,y)像素坐标(位置)。z是忽略)。
屏幕空间以像素为单位定义。屏幕左下角为(0,0);右上角是(像素宽度-1,像素高度-1)。
射线检测碰撞
public class API16Camera : MonoBehaviour {
private Camera mainCamera;
void Start () {
//mainCamera= GameObject.Find("MainCamera").GetComponent<Camera>();//获取主摄像机的Camera组件
mainCamera = Camera.main;//获取主摄像机的Camera组件
}
void Update () {
//Input.mousePosition是鼠标位置
//mainCamera.ScreenPointToRay把屏幕上的点转换为射线
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;//射线碰撞到的游戏物体
bool isCollider = Physics.Raycast(ray, out hit);//通过射线检测输出碰撞到的物体,并返回是否发生碰撞
if (isCollider)//如果射线碰撞到物体
{
Debug.Log(hit.collider);//hit.collider是射线所碰撞到的 碰撞器
}
}
}
给射线添加颜色
Ray ray = mainCamera.ScreenPointToRay(new Vector3(200, 200, 0));//将屏幕上的点转换为射线
//参数1:射线原点,参数2:射线方向,参数3:颜色
Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);
Camera.backgroundColor
设置背景
关于Camera组件的作用和一些属性介绍
Clipping Planes裁剪面
裁剪面最近
裁剪面最远
Field of View视野范围
Projection投射模式
Clear Flags清空
静态属性
allCameras
返回场景中所有的相机
allCamerasCount
获取场景中所有相机的数量
current
获取当前的相机
main
获取主相机
使用Camera把屏幕坐标转换成射线
方法
ScreenPointToRay
把屏幕坐标转换成射线
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraTest : MonoBehaviour {
private Camera camera;
void Start () {
camera = Camera.main;//利用引用节省性能
}
void Update () {
Ray ray = camera.ScreenPointToRay(Input.mousePosition);//通过屏幕坐标转换成射线
Debug.DrawRay(ray.origin, ray.direction);//绘制射线
Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100);//绘制100米的射线
RaycastHit hit;//碰撞信息
bool isCollider = Physics.Raycast(ray, out hit);//射线检测
Debug.Log(hit.collider);//输出碰撞信息
}
}