Unity-FlappyBird

感恩节快到了,需要给Boss搞一个小游戏,他发给国外的朋友作为感恩节的小玩意儿。大家脑暴后,觉得做个类似Flappy Bird的Flappy Turkey可能会是个不错的点子。

我找了下,网上用JS写的例子不少,感觉挺简单的,正好时间有空档,就准备用Unity写一个,借此熟悉下Unity。

因此我从网上找了一个Unity版本的教程,花了一个下午,跟着做了一遍。

流程

  • 导入素材

  • 设置天空盒(Window→Rendering→Lighting)

  • 搭建场景(鸟、背景建筑、道路、管道)

  • 碰撞检测(加Collider组件)

  • 给Bird加上动画

  • 给Bird加上死亡的烟雾特效

  • 创建管道的Prefab

  • 设置无限场景

  • 计分

  • 绘制UI

  • 设置游戏重新开始和结束的逻辑,和UI按钮绑定

  • 设置音效

一句话经验

如何锁定2D视角

其实没锁定,只是因为没开放3D视角操控的用户输入而已,只监听了一个空格键,所以就没法转换相机位置了,看起来就是锁定2D视角的效果。

如何将脚本和场景中的物体绑定

拖过去即可

如何修改重力

Edit→Project Settings→Physics

这次是乘以3了

Collider和Rigidbody的区别

如何绑定动画

1、给物体创建一个Animator组件

2、单独创建一个Animation Controller

3、将Animation Controller拖到Animator组件上

如何设置动画属性

1、将物体上的Animator组件,拖动到脚本的Animator属性上

2、关掉Has Exit Time

3、将Transition Duration设置为最小0

4、针对需要循环播放的动画,勾上loopTime

如何设置动画的播放逻辑

可以通过Window→Animation→Animator打开动画窗口

1、添加参数(即状态变量)

2、点击连线,设置切换条件

3、通过程序控制状态变量

如何在指定位置创建对象

1
Instantiate(crashSmoke, transform.position, Quaternion.identity);

如何生成Prefab

将场景中的物体拖到Asset中即可

如何生成无限地板

两块地板,不断修改其z位置

如何进行碰撞检测

碰撞需要2个物体都是xx和xx

注意刚体和触发器的区别

给触发器打标签tag

如何将场景转为2D,以方便设置UI

1、Scene窗口点一下工具栏的2D按钮

2、Scene窗口有个下拉按钮,可以取消掉天空盒

3、Canvas组件属性面板中Canvas Scaler分类下,将UI Scale Mode设置为Scale With Screen Size,并设置Canvas的分辨率

如何通过PlayerPrefs存储数据

这类似一个Key-Value的内存缓存。

如何设置音效

1、创建一个Audio Source组件

2、给GameObject设置2个属性:AudioSource和AudioClip

3、编辑器中给GameObject绑定AudioSource组件和AudioClip音乐文件

4、如果不需要自动播放,则去掉AudioSource组件的Play On Awake

5、在合适的时机调用播放方法

如何设置默认的Scene

Build的时候可以制定场景,把默认打开的放到第一个即可

如何设置默认的分辨率和窗口模式

打包的设置页面,可以设置分辨率和窗口模式

为什么VS中,C#代码没有语法提示

https://blog.csdn.net/qq_21539375/article/details/120482389

SerializeField和Serializable

SerializeField和Serializable - Ming明、 - 博客园

Unity3D 中提供了非常方便的功能可以帮助用户将Member Data在Inspector中显示,并且定义Serialize关系。简单的说,在没有自定义Inspector的情况下所有显示在Inspector 中的属性都同时具有Serialize功能。换句话说,就是你在Inspector看到什么,保存游戏的时候,这些值就会被保存成二进制文件。

感想

Unity和Vue的相似性

GameManager: Vuex,都是通过这个进行组件间的通信和状态管理,区别是GameManager在不同组件之间的传递比较麻烦,每个类中都要写一遍。

Component:组件

常用操作套路

1、放个物体

2、挂个脚本

3、操作脚本位移

问题

部署后访问报错

部署后,访问页面报这个错误:

Unable to parse Build/WebGL.framework.js.br! This can happen if build compression was enabled but web server hosting the content was misconfigured to not serve the file with HTTP Response Header “Content-Encoding: br” present. Check browser Console and Devtools Network tab to debug.

解决方案参考这个帖子

  • 构建时不压缩(不推荐,会导致构建的内容文件很大,比如gzip后18.9MB的文件,不压缩的话是42.3MB,是原来的2.24倍)

  • 压缩方式从Brotli改为Gzip

  • 设置服务端HTTP头

http-server设置https

http-server 支持 HTTPS 服务 - 简书

资料

https://www.bilibili.com/video/BV1Pg411k7hC/?spm_id_from=333.788&vd_source=1ddc293a4439c7106ebd7878040f7c81

这个教程真是入门不二之选了,各方面都涉及了,简短且具备可操作性。

Unreal Engine版本的Flappy Bird:

https://www.youtube.com/playlist?list=PLNTm9yU0zou4CD6v3ZiAlgl3_gy70nGaS

这个也是UE的,3D版本,只有效果,没有教程:

https://www.youtube.com/watch?v=LiLrwYRFXiE