一、视频播放功能
1.如何让视频在游戏场景中播放?
在Assets目录下添加一个渲染器纹理,步骤:新建→渲染器纹理
首先在创建一个平面,想让视频在平面上显示。在平面上添加一个组件 Video Player
然后将视频文件拖拽到视频剪辑位置上,把渲染模式改为渲染器纹理,再将之前创建的渲染器纹理拖拽过来。
现在视频播放的所以内容都会显示在这个纹路当中,现在只用把这个渲染器纹理拖拽到这个平面上即可,效果如下:
运行游戏后就可以播放了。
2.用脚本控制播放
player = GetComponent<VideoPlayer>();
void updata (){
if( Input.GetKeyDown(KeyCode.Space ) ){
if( player.isPlaying){
player.Stop();
}else{
player.Play();
}
}
二、通过脚本控制物体
创建一个物体当作玩家,为该物体添加角色控制组件Character Controller。
在脚本中得到这个组件
private CharacterController player;
player = GetComponent<CharacterController>();
现在希望用W、A、S、D去控制角色,由于这些方向按键会获取两个轴向数值:
水平轴;float horizontal = Input.GetAxis("Horizontal");
垂直轴:float vertical = lnput.GetAxis("Vertical");
当我们按了A D的时候就会返回-1和1的数值 ,并且这些数值是渐进的过程。
然后通过这两个轴向就可以知道是否按了哪个方向键了。
再将其创建成为方向向量
Vector3 dir = new Vector3(horizontal,0, vertical);
同时可以检测这个方法向量,按下对于的键可以生成对应的方向向量
Debug.DrawRay(transform.position, dir,Color.red);
比如:按S
现在拿到这个方向就可以开始移动了,朝向该方向移动
player.SimpleMove(dir);
三、Unity Build-in渲染管线
渲染流程
首先调用Randor()开始渲染
1.剔除:视椎剔除、遮挡剔除、层级等规则。将不想看到和看不到的物体排除掉。
2.渲染顺序:按距离、渲染队列等规则。为剩下的物体确认一个渲染的顺序。
3.打包数据含大量数据、参数。
4.调用Shader :SetPassCall、Drawcall。
5.GPU渲染管线:会把3D的模型数据渲染成2D的图像。将这些图像输出到一个叫帧缓冲区的一个地方 。
6.后处理;通过CPU端去拿到帧缓冲区的一个图像,然后再调用Shade在进入我们的GUP渲染管线对帧缓冲区的图像进行二次的修改(比如:说调色、Bloom之类的后处理效果),最终显示到平面面前。
其中GPU渲染管线内容一共四个步骤:
1.顶点处理阶段(Vertex Shader)。
2.图元装配及光栅化阶段(硬件阶段)。
3.片元处理(Fragment Shader)。
4.输出合并。
简略介绍CUP应用程序阶段
1.剔除Culling
①视椎体剔除(Frustum Culling)
视锥体是指摄像机根据FOV参数、远、近裁面这几个参数共同组成的一个金字塔形状的立方体
视椎体剔除就是我们的模型会跟这个视椎体做一个碰撞检查,如果它跟我们的视椎体有相交的部分就说名应该被绘制,如果完全没有相交就说明这个模型是我们看不到的,就应该被剔除掉 。
对于复杂模型的表面会生成一个AABB的包围盒
就用简单的一个AABB包围盒跟这个视椎体做一个碰撞检测。
②层级剔除(Layer Culling Mask)、遮挡剔除(Occlusion Culling)等等。
层级剔除:可以根据某一些特定层级的物体,对它进行一个选择性的排除。比如给物体单独设定一个层级,然后在Camera组件上找到一个Culling Mask选项,将之前设定的层级关闭,这样可以把这一层上面的所以物体剔除了。
2.排序Sort
①渲染队列 RenderQueue。
这个数值越小就表明越先渲染 。如果数值相等就分以下两种情况
对于不透明队列(RenderQueue < 2500)的情况,按摄像机距离从前到后排序
对于半透明队列(RenderQueue > 2500)的情况,按摄像机距离从后到前排序
然后将会按照渲染的顺序逐个的把场景里面所有的物体的数据给提交到GPU端。
这些打包发送给我们的GPU端的数据包含如下内容,打包好了之后回调用两个指令,GUP渲染管线收到这两个指令之后就会开始工作了。