❤️UNITY实战进阶-最最朴实无华的前言-1

  • 前言

        去年和今年是一个命途多舛的两年, 从去年年底和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

     框架上分为三步, 分别结合了三种目前网络上常见的框架:

  1. Game Framework
    Game Framework框架是一个基于 Unity 引擎的游戏框架,主要对游戏开发过程中常用模块进行了封装,很大程度地规范开发过程、加快开发速度并保证产品质量。
    框架共分为两层, 底层GameFramework逻辑, 上层UnityGameFramework结合mono的逻辑
    框架地址  https://github.com/EllanJiang/GameFramework/
  2. 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.
  3. 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()
改变类型回调: OnChangedVariableTypeCallBack()

(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;
}

想起来还有什么好玩的再添加....


接下来就开启制作篇章!
由于是边制作边写博客, 进度会偏慢!
周末一般没时间写!
有兴趣的小伙伴可以关注一波

猜你喜欢

转载自blog.csdn.net/flj135792468/article/details/120166222
今日推荐