C#初中级实战—3DFlipBird(三)


先放效果
https://github.com/euphoriaer/3DBird
在这里插入图片描述

1.升级渲染管线

从Package Manager中安装URP(原名:Lightweight RP)
在这里插入图片描述
在这里插入图片描述

安装好之后,创建URP渲染管线:
在这里插入图片描述
在这里插入图片描述

创建完成,在项目设置中,选择渲染管线
在这里插入图片描述

2.Bird增加重力感应:

注意事项:如果物体发紫,那么就需要为物体指定URP的shader
2.Bird增加重力感应:
使用Input.acceleration获取手机的重力感应方向:其中transform为需要根据手机重力感应移动的物体的transform。

 /// <summary>
    /// 重力感应
    /// </summary>
    private void GravityInteraction()
    {
    
    
        Vector3 dir = Vector3.zero;//方块移动向量

        dir.x = Input.acceleration.x;

        transform.Translate(dir * speed * Time.deltaTime);
    }

为了方便测试,这里使用条件编译,只有在移动端才启用重力感应进行左右移动
在这里插入图片描述

3.增加金币和UI面板

在这里插入图片描述

UI分数面板使用Screen Space -Camera模式(创建一个Canvas),此模式可以让UI面板一直处于摄像机前面,同时可以调节面板距离摄像机的位置(Plane Distance)。

提问:为什么要使用Screen Space -Camera?和另外两种模式相比这个模式优势在哪里
优势在于可以将UI面板和3D物体相结合,制作3DUI,如图硬币是一个3D物体,要想让它作为UI显示,只能使用这个办法(Overlay模式只有2D物体可以显示在UI面板,World Space是世界空间显示,无法让面板始终处于摄像机前方(与摄像机脱节))

在这里插入图片描述

而爱心使用世界空间模式,因为我们需要让爱心(bird的血量跟随bird移动)
在这里插入图片描述

最终效果
在这里插入图片描述

做个Overlay的测试,可以看到,在overlay模式下,即使一个物体足够大,可以占据UI面板,但是依然不会显示在UI界面上(Cude放大100倍)
在这里插入图片描述

4.天空增加障碍物云朵

在这里插入图片描述

在这里插入图片描述

代码修改:
在这里插入图片描述

增加云朵和云朵位置的列表。
在这里插入图片描述

修改创造物体的代码,传入创造物体的列表和位置的列表(因为地面物体和空中物体不能在同样的位置进行随机,所以将创造方法封装一下(可以进一步写成泛型的封装,但是此处已经够用了)。

在这里插入图片描述
在这里插入图片描述

这里将控制创造间隔改为使用InvokeRepeating,不再使用time计时进行重复创造(有多个需要不同计时的地方会造成困扰,使用InvokeRepeating间隔调用创造函数更好)
还有若干修改请参考代码

5.打包设置,自动横屏(双方向)
在这里插入图片描述

下一次将进一步修改界面,两边感觉有点空空的,需要移动的大山或者大树草丛等环境加深移动的效果,
优化代码(增加缓存池,减少GC,目前直接使用创造和销毁,明显能感觉到某一刻的卡顿(系统正在GC,进行内存回收销毁等操作))

项目地址

猜你喜欢

转载自blog.csdn.net/euphorias/article/details/108962180