先放效果
https://github.com/euphoriaer/3DBird
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/92d56768d6c1e42f9cd6927377e0e416.png#pic_center)
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,进行内存回收销毁等操作))