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

    科技2025-08-04  25

    文章目录

    1.升级渲染管线2.Bird增加重力感应:3.增加金币和UI面板4.天空增加障碍物云朵 先放效果 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,进行内存回收销毁等操作))

    项目地址

    Processed: 0.040, SQL: 8