unity3dunity3d 摄像机特效有哪些高级应用

后使用快捷导航没有帐号?
 论坛入口:
  |   |    |   | 
我要游戏程序
查看: 9176|回复: 2
Unity3D摄像机详解
作者:李志健
  正如电影中的镜头用来将故事呈现给观众一样,Unity的相机用来将游戏世界呈现给玩家。你始终至少有一个相机在场景中,你也可以有多个。多相机可以给你一个双人分屏效果或创建高级的自定义效果。你可以让相机动起来,或用物理(组件)控制它们。几乎你能想到的任何事,都可以用相机变成可能,而且为了适合你的游戏风格,你可以用典型的或特殊的相机类型。
  相机是为玩家捕捉和显示世界的一种装置。通过定制和操作相机,可以让你的游戏外观与众不同。在一个场景中你可以有数量不限的相机。它们可以被设置为以任何顺序来渲染,在屏幕上的任何地方来渲染,或仅仅渲染屏幕的一部分。
·Clear Flags 清除标记
决定屏幕的哪部分将被清除。当使用多个相机来描绘不同的游戏景象时,利用它是非常方便的
·Background 背景
在镜头中的所有元素描绘完成且没有天空盒的情况下,将选中的颜色应用到剩余的屏幕
·Culling Mask 剔除遮罩
包含或忽略相机渲染对象层。在检视视图中为你的对象指派层
&#183rojection 投射
切换摄像机的模拟透视功能
·--& Perspective 透视
相机将用完全透视的方式来渲染对象。
·--& Orthographic 正交
相机将用没有透视感的方式均匀地渲染对象
·Size 大小
当设置了正交时摄像机的视口大小。
·Field of view 视野范围
相机的视角宽度,以及纵向的角度尺寸。
·Clipping Planes 剪裁平面
从相机到开始渲染和停止渲染之间的距离。
·--& Near 近点
开始描绘的相对于相机最近的点。
·--& Far 远点
开始描绘的相对于相机最远的点。
·归一化视口矩形
用四个数值来表示这个相机的视图将绘制在屏幕的什么地方,使用屏幕坐标系(值0-1)。
·--& X
相机视图将进行绘制的水平位置的起点
·--& Y
相机视图将进行绘制的垂直位置的起点
·--& W (Width) 宽度
相机输出到屏幕上的宽度
·--& H (Height) 高度
·相机输出到屏幕上的高度
·Depth 深度
绘图顺序中的相机位置,具有较大值的相机将被绘制在具有较小值的相机的上面
·Rendering Path 渲染路径
该选项定义相机将要使用的渲染方法
·--& Use Player Settings
& &&&使用播放器设置
该相机将使用任意一个播放器设置中所设置的渲染路径
·--& Vertex Lit 顶点光照
本相机对所有对象的渲染会作为顶点光照对象来渲染
·--& Forward 快速渲染
所有对象将按每种材质一个通道的方式来渲染,如同在Unity2.x中的标准
·--& Deferred Lighting 延迟照明
所有对象将无照明绘制一次,然后所有对象的照明将一起在渲染队列的末尾被渲染。
·Target Texture 目标纹理
(Unity Pro/Advanced only)
请参考Render Texture,该页包含了相机视图的输出。这个引用属性将禁用相机渲染到屏幕的功能。
  相机对于将你的游戏显示给玩家是必不可少的。它们可以被定制、被脚本化、或被子类化以实现几乎任何可以想象的效果。对于一个益智游戏,你要保持相机处于静态显示全部视角。对于第一人称射击游戏,你应该将相机作为玩家角色的子对象,并将其放置在与角色的眼睛等高水平上。对于一个赛车游戏,你可能更希望让相机跟随玩家的车辆。
  你可以创建多个相机并且给每一个分配不同的深度。相机是按深度从低到高来绘制的,换言之,一个深度为2的相机将绘制在一个深度为1的相机之上。你可以调整标准视口矩形(参照前面的属性列表)的属性值来改变其大小和其在屏幕上的位置。这样你就可以创建多个小视窗,如导弹控制器,小地图窗口,后视镜等等。
Re:Unity3D摄像机详解
挺详细的 学习了
Re:Unity3D摄像机详解
这也叫详解,真无语6177人阅读
&&&& 用unity3d 如果你没有碰到摄像机抖动的问题,那么你是幸运的。我相信如果你的摄像机控制比较复杂,或者人物移动比较复杂,或多或少总会有这样的疑惑:摄像机好像再抖,或许是模型在抖。总之就是各种抖。当你以为发现问题并解决了,一切都很好,突然有一天,它又开始抖了,而且不止一次这样。我就碰到过这种情况,特此做下总结。
&&& 首先你要理解摄像机什么情况下会给你抖动的感觉,简单来说你如果想让摄像机抖动,那么肯定是让摄像机不停变换位置,而且是无规则的。说白了,就是不规则的速度变化会引起抖动。注意这里是相对速度,因为如果绝对速度在变化,但相对速度是一致的,其实你看到的物体是不抖的。这一点在后面的一种情况会用到。接下来就分析下各种情况和原因以级解决方案。
1.摄像机控制很简单,却有大幅度的抖动。
这种情况其实一般不是摄像机控制的问题,而是你摄像机所看物体的策略的问题。首先你要确保摄像机是没帧都更新位置的,你可以放在Update()函数中或者LateUpdate()函数中,切忌不要放在FixedUpdate中去更新位置,因为FixedUpdate不保证没帧都执行,这样就会有断续的现象。然后你要确保摄像机看向的物体的移动是正常的,就是说物体不是在那里抖动的,但摄像机却没有一起抖,这可能和你的逻辑有关。不过这种情况并不常见。大部分时候,相信简单的摄像机控制是最能保证稳定的画面的。
2.摄像机控制简单,大部分时候不抖动,偶尔抖一下,时断时续。
这种情况非常令人困惑,因为理论上应该是不会抖动的,甚至很多时候你要怀疑是不是unity3d自己的问题或者我的帧数不稳定引起的?这里我首先要非常明确一点:Unity3d是一个成熟的商业产品,如果你能够确保正确使用里面的组件和写下正确的代码,那么是不会有这些问题的,包括摄像机抖动和其他一些常见的问题。你首先要看自己的代码和用法是否有问题。
这种情况的原因可能会比较多,我这里只列举我自己碰到的。第一种是因为不必要的平滑算法引起的。你可能会觉得奇怪,平滑算法难道不是为了摄像机不抖而存在的吗?怎么反而会引起摄像机抖动。甚至有的时候你感觉摄像机抖,然后加了平滑算法就不抖了。这里我要解释一下,也是一开始说的,摄像机抖动是基于相对速度的变化不稳定。那么假设你的摄像机本身控制比较简单,其实我们可以基本肯定相对变化速度是一致的。比如你摄像机就是看着一个人,这个去哪摄像机看哪,那么是不是说两人相对速度其实为0。然后你说人抖动怎么办?那么摄像机会一起抖,只不过由于他们相对速度为0,所以你看人是不抖的,但是如果你有场景作为背景,那么你会感觉地面有点抖。这是必须权衡的,因为在场景和人物不同步的情况下,肯定会有一个相对稳定而另一个相对抖动,一般我们和人物一致就好了,毕竟人的视觉肯定是聚焦人物的。那么在这样的基础上,我加了平滑算法,会怎么样呢?平滑无非两种,一种是延迟,一种是根据以前的速度进行加速度计算,然速度变化变慢。不论哪种,在摄像机控制简单的情况下都是画蛇添足。因为首先你已经确保了人和摄像机之间的稳定性。你却加了这种算法,导致了他们不再稳定,而且同时你也无法弥补场景那边被牺牲的抖动,可能反而更抖了。那么照这么说,平滑算法岂不是没用?不是的,后面的情况你会看到平滑算法的引用。只是在摄像机规则很简单的情况下,并不需要额外的平滑算法。
这里还有个小细节,就是你的摄像机一定要先设置好位置,再LookAt,如果你先LookAt,再设置摄像机的位置的话,那么你的摄像机其实LookAt了另一个地方了。这也是引起抖动的原因之一。
3.摄像机控制比较复杂,有时经常抖动,有时候又不抖,神经病一样的。
这种情况就开始复杂起来了。首先我建议你将摄像机改成简单的规则,看是否有抖动。有的话参考1和2里面的先处理。
如果你发现规则简单的时候是不抖动的,但规则复杂的时候抖动,那么你就要好好看看你的规则的代码了。如果你的摄像机移动有速度的概念,一定要将速度和Time.dealtTime联系在一起。也就是这一帧跑了多久时间,这是很重要的,因为每一帧的时间不同,你如果采用相同的位移,其实会引起不同的速度感。
其次,你要明确你的移动算法是基于匀速的,不论是移动还是旋转,都应该是匀速的(也许也可以基于某种速度变化规则,但务必是有规则的运动)。这里特别要注意匀速运动如果到了终点之前,其实是要一个减速的,不然就会过头,过头的话下一帧可能需要回到正确的位置,就会回退了,如此反复,也会抖动。
第三,不建议用ITween这种插件控制摄像机运动,因为它内部的代码其实并没有考虑这些,所以你用ITween导致摄像机抖动是很正常的。当然你图方便然后觉得抖就抖吧那倒是无所谓。
最后,如果还是找不到原因,就排除法,一句句注释掉代码,看到底是哪一句引起了抖动,然后再仔细分析原因。
4. 从正常的逻辑角度来讲摄像机确实会抖动,客观原因。
这种情况也不多,但确实存在。比如你的摄像机的规则是对准多个目标的中心,或者还和力啊,人的转向啊,人的速度变化很突然啊等等有关。如果本身的设计就是导致摄像机抖动的原因,那么这个时候就是平滑算法的用途了,平滑算法本身就是为了让本来变化的不稳定的速度趋于稳定。具体平滑算法有时间再写吧。今天要睡觉了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:234165次
积分:3365
积分:3365
排名:第10489名
原创:88篇
转载:19篇
评论:91条
文章:54篇
阅读:103419
(1)(1)(1)(3)(2)(2)(4)(2)(2)(4)(5)(1)(2)(4)(2)(3)(10)(5)(7)(10)(4)(2)(3)(3)(5)(10)(3)(2)(2)(1)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'[基础教程] unity3d里面的摄像机是怎么调用和操作的
我的图书馆
[基础教程] unity3d里面的摄像机是怎么调用和操作的
最近项目比较忙,有一段时间没有更新教程了。今天终于空下来有时间写点东西了。
今天看一下unity3d里面的摄像机是怎么调用和操作的。
打开unity3d新建一个工程。在我们打开工程的时候unity3d会主动添加一个Main Camera,在Hierartchy视图中。点击Main Camera在Inspector中出现Main Camera的组件信息。如图
在camera组件中可以对是相机的一些属性进行调节。
Clera Flags:清除标记。下拉菜单一共有4个选项。
Skybox:天空盒,背景显示天空盒。如果该相机没有添加天空和则显示背景颜色。Solid Color:纯色,背景显示我没在Background中调制的颜射。Depth Only :仅深度不显示任何背景。空白处为透明。Don't Clear :不清除,每帧绘制在下一帧之上,造成涂片效果。一般很少用到。
Background :背景颜色。
Culling Mask :剔除遮罩,通过标签来选择物体是否被相机渲染。
Projection:相机类型,分为透视相机和正交相机。
perspective:透视相机。
Orthographic:正交相机。
区别如图:
当我们选择perspective是Field of view:视野范围,调节摄像机的视野。
当我们选择Orthographic是size:设置正交相机的视口大小。
Clipping Planes :Near为近距裁剪,Far为远距裁剪。
Normalized View Port Rect:用四个数值来表示这个相机的视图将绘制在屏幕的什么地方,使用屏幕坐标系(值0-1)。(注:屏幕坐标系的0,0点是在屏幕的左下角的)
在unity中做屏幕的分屏用到的就是这个参数。
举个例子说明一下分屏的方法:
首先创建一部相机。
将Main Camera相机的NormalizedView Port Rect属性里的x:0,y:0.5,w:1,h:0.5。
意思是是相机显示的坐标为(0,0.5)宽度为1,高度为0.5。
将新添加的Camera的Normalized ViewPort Rect属性里的x:0,y:0,w:1,h:0.5。
意思是是相机显示的坐标为(0,0.5)宽度为1,高度为0.5。
Game视图将显示如下结果
Depth :深度,用来确定不同相机的绘制顺序。具有较大值的相机将被绘制在具有较小值的相机的上面。
Rendering Path:渲染路径,下面有四个选项Use Player Settings:使用播放器设置。Vertex Lit :顶点光照。Forward :快速渲染。Deferred Lighting: 延迟照明。根据项目需求选择相应的渲染路径。
Target Texture 目标纹理,它将放置相机的视图到一个纹理上,该纹理可以被应用到另一个对象。这使得它可以方便地创建体育场大屏幕、监控摄像机、倒影等等效果。
Flare Layer:光晕层,让镜头光晕(LensFlares ) 出现在图像中。默认情况下,相机已经贴上光晕层(FlareLayer)。
GUI Layer:用户界面层,使二维图形用户界面可以渲染。在检视面板点击GUI层(GUI Layer)的复选框,可以启用和禁用在相机绘制GUI。
Audio Listener:音频侦听器,音频监听器扮演着像麦克风这样的设备。它接收任何在场景输入的音频源(AudioSource),并通过计算机的扬声器播放声音。
这样一部摄像机的基本属性已经介绍完了。下面我们看下怎么给场景添加天空盒。
第一步:选择相机,点击菜单栏中的component-&Rendering-&Skybox.
然后在Inspector视图最下面多了一栏Skybox。
然后给他添加一个天空球。天空球的制作方法,
一:新建一个材质球
选择新建的材质球,命名为skybox1,如图所示将材质设置为Skybox类型的。
结果如图:
在相应的地方添加相应的图片。这样一个天空球就制作完成了。
还有一个简单方法就是导入unity3d自带的资源里面有自作完成的天空球。
(注:自己制作天空球是要注意图片的属性 Wrap Mode属性
应改为Clamp格式,否则会出现接缝。)
将天空球制作完毕后添加的摄像机上,如图:
下面我们来看下怎么实现两个相机的动态切换。
首先我们在unity中创建两个相机。分别为camera0,camera1.
创建一个js脚本文件。写入一下代码。
var camera0 : C //定义一个名字为camera0的相机对象
var camera1 :C //定义一个名字为camera1的相机对象
function Update ()
if (Input.GetKey("1")) //如果敲击键盘的"1"
camera1.enabled = //camera1激活
camera0.enabled = //camera1停止
if (Input.GetKey ("0")) //如果敲击键盘的"0"
camera1.enabled = //camera1停止
camera0.enabled = //camera1激活
} 复制代码
将脚本添加到一个游戏物体上运行游戏。敲击键盘的1和0键。检测代码。
原文链接:
TA的推荐TA的最新馆藏[转]&
喜欢该文的人也喜欢您的位置 >-- >
Unity序列化高级篇及应用篇教程
我的评分:
发布者:我学院
所属标签 :
更新时间 :
教程类型 :
教程等级 : 【中级教程】
891 次播放
共浏览:857 次
今日播放:0 次
正在加载评论...
同软件类别
用户贴士商务合作关于我们
Copyright ?
直线教程,All Rights Reserved.&沪ICP备号
本站常年法律顾问:恒升律师事务所 杜宇律师
本网站所有产品设计,功能及展示形式,均已受版权或知识产权保护
任何公司及个人不得以任何方式复制部分或全部,以及攻击、诽谤本站,违者将依法追究责任,特此声明

我要回帖

更多关于 unity3d 多个摄像机 的文章

 

随机推荐