-
前言
去年和今年是一个命途多舛的两年, 从去年年底和2位小伙伴创业一直到今年年中, 在吭哧吭哧的边做打工人边创业, 生活真的真的很充实, 根本没有时间让你去做其他事, 在损失了大量的经济、时间和精力后, 只添加了少许的阅历以及适中的经历, 在接触到当老板和当管理者的不同之处时, 也见识到了各类不同性格的人的嘴脸, 当然也有很多朋友给予过我帮助, 真的很感谢TA们。
我在没有任何准备去做这件事的时候, 依然坚持去做了,这个冲动不是一时半会就发生的, 是在我深深的不知道到了30+以后该何去何从时, 幻想披荆斩棘能杀出一条路来, 可笑的是被现实刮得遍体鳞伤。
今年3月份的时候, 我得知我老婆怀了孕, 第一时间听到这个消息后很激动, 随后而来的是面对选择继续砸钱创业还是选择家庭, 在这方面我和两位小伙伴也发生了分歧, 但是我还是说服了他们, 随后而来的我也更加感受到了肩膀上沉重的压力, 同时也希望我的宝宝能健健康康的落地。
此教程也算是我快到中年的答谢礼吧! 也希望同行之人能少走点弯路。
号外! 号外! 史上最低价!史上最低价!!
本人出售各类激光雷达, 包括但不限于<思岚A2/A3/S系列><YDLidar-G4><星秒TOF><北洋UST-10LX>, 请备注你需要的型号, 我看到会直接报价的。也承接各类雷达互动游戏外包项目。可直接添加微信和我沟通。
-
内容简介
本次实战进阶, 会制作出一个伪网易云音乐出来,包含:
(1) 各框架的基础介绍和使用
(2) 使用Game Framework 打包工具生成资源
(3) 使用ILRuntime进行代码热跟新
(4) 几种常用的设计模式介绍
(5) TexturePacker 图集的使用
(6) 无限滚动组件
(7) <Unkown>
需要各位自己手动去创建项目工程, 自行集成各类框架, 细节不会呈现的太多, 需要自己去理解编写, 伸手党一律不理
Unity版本: 2020.1.0f1
Vusual Studio版本: Community 2019
框架上分为三步, 分别结合了三种目前网络上常见的框架:
- Game Framework
Game Framework框架是一个基于 Unity 引擎的游戏框架,主要对游戏开发过程中常用模块进行了封装,很大程度地规范开发过程、加快开发速度并保证产品质量。
框架共分为两层, 底层GameFramework逻辑, 上层UnityGameFramework结合mono的逻辑。
框架地址 https://github.com/EllanJiang/GameFramework/ - ILRuntime
ILRuntime项目为基于C#的平台提供了一个纯C#实现
,快速
、方便
且可靠
的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新。
框架地址 GitHub - Ourpalm/ILRuntime: Pure C# IL Intepreter Runtime, which is fast and reliable for scripting requirement on enviorments, where jitting isn't possible. - ETServer
ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,服务端是使用C# .net core开发的分布式游戏服务端,其特点是开发效率高,性能强,双端共享逻辑代码,客户端服务端热更机制完善,同时支持可靠udp tcp websocket协议,支持服务端3D recast寻路等等。
框架地址 https://github.com/egametang/ET
首先需要大家优先会使用Game Framework框架, 这部分有博客写的很详细了, 依葫芦画瓢就能理解的。还需要有设计模式的思维。
插件:
AVProVideo | 本地/网络视频播放 | 下载地址 提取码:cdz4 |
uAudio Mp3 PlayerStreamer | 本地/网络音频播放 | 下载地址 提取码:ey3d |
DOTween | 动画插件 | 下载地址 |
Spine | 骨骼动画 | 下载地址 |
TexturePacker Importer | 图集 | 下载地址 |
-
代码风格
此处仅为个人习惯, 不代表所有人观点。
(1) 代码命名格式
类成员变量命名 | m_MyVariable |
静态变量命名 | s_MyVariable |
函数命名 | 根据功能命名, 例: 获取变量类型:GetVariableType() 设置变量类型:SetVariableType() |
(2)关于Unity中Inspector视图显示
//使用此特性可以将 私有的/受保护的 显示在面板上, 同时通过类去调用的时候不会显示此变量
[SerializeField]
private Text m_AppName = null;
//对于需要通过类去调用私有变量的时候, 封装一个属性变量去传递
public Text AppName
{
get { return m_AppName; }
}
//外部既可以调用也可以设置
public Text AppNameExample1
{
get { return m_AppName; }
set { m_AppName = value; }
}
//外部仅能调用, 仅类的内部设置值
public Text AppNameExample2
{
get;
private set;
}
这样难道不觉得代码看起来很清爽吗? 虽然代码量增加上来了, 但是看代码毕竟悦己也悦别人。
(3)注释
如果函数命名的足够好的前提下是可以不用打注释的,例如:
private void SearchMusic()
{
}
private void DownloadMusic(int id, string songName, string singer)
{
}
private void PlayMusic(int id, int duration)
{
}
你觉得这样的代码需要打注释吗?
public static Texture2D BeautySkinWhiteningDermabrasion(this Texture2D texture2D)
{
}
如果是这样的, 我建议还是打个注释比较好点, 当然如果你想动点小心思的话, 也可以不用打注释, 但是不提倡这种行为, 还望诸君且行且珍惜。
(4)设置一个全局静态数据类 GlobalData.cs
(5)灵活使用using, 例: UnityEngine.Object和System.Object冲突了, 可以使用
using SysObject = System.Object;来处理。
(6) 还有编写了各种让人虎躯一阵的代码, 请勿模仿。
try
{
//TODO:
}
catch(Exception e)
{
Application.OpenURL("http://stackoverflow.com/search?q="+e.message,"_blank");
}
pause_state = pause_state == false ? true : false;
[SerializeField]
private InputField m_SearchMusicInput = null;
m_SearchMusicInput.onValueChanged.AddListener(OnSearchMusicValueChanged);
private void OnSearchMusicValueChanged(string content)
{
m_SearchMusicInput.text = content;
}
想起来还有什么好玩的再添加....
接下来就开启制作篇章!
由于是边制作边写博客, 进度会偏慢!
周末一般没时间写!
有兴趣的小伙伴可以关注一波