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 | |
如何生成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
资料
这个教程真是入门不二之选了,各方面都涉及了,简短且具备可操作性。
Unreal Engine版本的Flappy Bird:
https://www.youtube.com/playlist?list=PLNTm9yU0zou4CD6v3ZiAlgl3_gy70nGaS
这个也是UE的,3D版本,只有效果,没有教程: