美文网首页
Carema、射线、Playerprefs讲解

Carema、射线、Playerprefs讲解

作者: _凉笙 | 来源:发表于2016-12-23 01:02 被阅读0次

    一、Carema

    静态属性�allCameras,allCamerasCount,main
    实例属性�参考属性面板
    实例方法
    ScreenPointToRay() 屏幕位置转射线 返回一条射线从摄像机通过一个屏幕点。
    �ScreenToWorldPoint() 屏幕转视窗位置 从屏幕空间到视窗空间的变换位置。

    屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight),Z的位置是以世界单位衡量的到相机的距离。 �WorldToScreenPoint() 世界转屏幕位置 从世界空间到屏幕空间变换位置�WorldToViewportPoint() 视窗转世界位置 视口空间是归一化的并相对于相机的,相机的左下为(0,0);右上是(1,1);Z的位置是以世界单位衡量的到相机的距离。

    Paste_Image.png
    Paste_Image.png
    摄像机属性:
    Paste_Image.png

    ***Clear Flags ***
    清除标识:确定了屏幕哪些部分将被清除,方便多个摄像机画不同的游戏元素
    Skybox
    天空盒:这是默认设置。屏幕上的任何空的部分将显示当前相机的天空盒。如果当前的相机没有设置天空盒,它会默认在渲染设置(Render Settings )选择天空盒

    Solid Color
    纯色,屏幕上的空白部分将显示当前摄像机的背景色

    Depth Only
    深度相机,只渲染采集到的画面如果你想绘制一个玩家的枪,又不让它内部环境被裁剪,你会设置深度为0的相机绘制环境,和另一个深度为1的相机单独绘制武器。武器相机的清除标志(Clear Flags )应设置 为depth only。

    Don't Clear 不清除此模式不清除颜色或深度缓存。每帧的渲染画面叠加在上一帧画面之上。

    Paste_Image.png

    Rendering Path
    渲染路径 :定义什么绘制方法被用于相机的选项

    Use Player Settings 使用玩家设置:在玩家设置(Player Settings.)相机使用哪个渲染路径。

    Forward 正向渲染:所有对象每材质渲染只渲染一次,快速渲染

    Deferred 延迟照明:所有物体将在无光照的环境渲染一次,然后在渲染队列尾部将物体的光照一起渲染出来。

    Legacy Vertex Lit 顶点光照 :所有被这个相机渲染的物体都将渲染成Vertex-Lit物体。

    Legacy Deferred : 旧的延迟光照

    Paste_Image.png

    Traget Texture
    目标纹理:渲染纹理 (Render Texture)包含相机视图输出。这会使相机渲染在屏幕上的能力被禁止。可用于实现画中画或者画面特效

    Occlusion Culling :
    是否剔除物体背向摄像机的部分HDR:高动态光照渲染,启动相机高动态范围渲染功能。让场景更真实。

    Paste_Image.png

    Projection
    Perrspective:透视:摄像机(Camera)将使物体和透视完好无损。

    Orthographic 正交:标识正交相机模式,从相机的视图中删除所有的透视效果,最主要用在等距或2D游戏中。注意雾是在正交相机模式下渲染,因此可能不会如预期般出现

    Vertex Lit:顶点光照####

    这个Shader是Vertex-Lit,是最简单的Shader之一。这个Shader渲染代价是非常小的所有照射在该物体上的光源通过一次光能传递渲染完成并且只计算顶点光源。因为是Vertex-Lit,所以不会有任何基于像素渲染的效果,例如:Light Cookies,Normal Mapping和Shadows。这个Shader对模型的细分同样更加敏感,假如在很靠近立方体的地方放置一个点光源,并且应用这个Shader,这个光源只会在此角落进行计算

    General shader performance 通常的着色器性能

    Unlit:不发光。这只是一个纹理,不被任何光照影响VertexLit. 顶点光照

    Diffuse. 漫反射

    Normal mapped. �法线贴图,比漫反射更昂贵:增加了一个或更多纹理(法线贴图)和几个着色器结构

    Specular.:�高光。这增加了特殊的高光计算

    Normal Mapped Specular:高光法线贴图。这比高光更昂贵一点

    Parallax Normal mapped: �视差法线贴图。这增加了视差法线贴图计算

    Parallax Normal Mapped Specular..�视差高光法线贴图。这增加了视差法线贴图和镜面高光计算

    二、射线

    射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。

    用途:射线应用范围比较广, 多用于碰撞检测(如:子弹飞行是否击中目标)、角色移动等 等。


    Paste_Image.png Paste_Image.png

    API:
    1、Ray Camera.main.ScreenPointToRay(Vector3 pos) 返回一条射线Ray从摄像机到屏幕指定一个点

    2、Ray Camera.main.ViewportPointToRay(Vector3 pos) 返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点

    3、Ray 射线类

    4、RaycastHit 光线投射碰撞信息

    5、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)
    当光线投射与任何碰撞器交叉时为真,否则为假。

    bool  Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask)
    在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息()。
    
    bool  Physics.Raycast(Ray ray, float distance, int layerMask)
    当光线投射与任何碰撞器交叉时为真,否则为假。
    
    bool  Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int layerMask)
    当光线投射与任何碰撞器交叉时为真,否则为假
    

    注意:如果从一个球型体的内部到外部用光线投射,返回为假。

    origin : 在世界坐标中射线的起始点

    direction: 射线的方向

    distance: 射线的长度

    hit: 使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。

    layerMask: 只选定Layermask层内的碰撞器,其它层内碰撞器忽略。 选择性的碰撞

    6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask)
    投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。

    物体怎么向前方发射一条射线

    // 从自身坐标到世界坐标变换方向。
    // 变换方向x, y, z从自身坐标到世界坐标。
    Vector3 fwd = transform.TransformDirection(Vector3.forward);
    
    if (Physics.Raycast(transform.position, fwd,out hit,1))
    Debug.DrawLine(transform.position,hit.point,Color.red);
    
    其中,Physics.Raycast(transform.position, fwd,out hit,1)为发射射线函数,transform.position为射线原点,fwd为发射方向,1为距离。
    
    如果前方有碰撞体,则发射射线。
    
    Paste_Image.png

    三、常用类Playerprefs

    静态方法�SetFloat(),SetInt(),SetString() 写入数据�GetFloat(),GetInt(),GetString() 读取数据�DeleteKey(),DeleteAll() 删除数据�HasKey(“SS”), 检查数据,是否有该键�Save()

    public string Name
    {
    get{
    return PlayerPrefs.GetString(“Name”);
    }
    set{
    PlayerPrefs.SetString(“Name”,value);
    PlayerPrefs.Save();
    }
    }

    相关文章

      网友评论

          本文标题:Carema、射线、Playerprefs讲解

          本文链接:https://www.haomeiwen.com/subject/ixszmttx.html