C# Lazy(延迟初始化)用法 有更新!
从net 4.0开始,C#开始支持延迟初始化,通过Lazy关键字,我们可以声明某个对象为仅仅当第一次使用的时候,再初始化,如果一直没有调用,那就不初始化,省去了一部分不必要的开销,提升了效率,同时Lazy是天生线程安全的
从net 4.0开始,C#开始支持延迟初始化,通过Lazy关键字,我们可以声明某个对象为仅仅当第一次使用的时候,再初始化,如果一直没有调用,那就不初始化,省去了一部分不必要的开销,提升了效率,同时Lazy是天生线程安全的
在Unity开发中为了保证性能,降低DrawCall,会进行合批处理(静态/动态合批),但是在处理完毕后,使用Frame Debug工具查看时会看到很多合批失败的情况,本文将《BatchBreakingCause》提到的合批失败的情况进行了翻译转述。
在项目中开发中,经常会创建大量的脚本类的文件,比如使用Lua时,需要创建新的Lua脚本,学习或使用Shader时也会创建一些新的Shader文件,对于这些文件如果从头开始写将会是一个痛苦的事情,而且多数内容是重复的。在使用很多其它工具时,其都提供或者可以自定义一些标准的模板,根据模板创建出含有基础内容的脚本文件,然后在其基础上进行修改即可。
其实Unity也提供了一些标准的模板,可以帮助我们创建新的文件,比如可以在Project面板右键或者通过Assets/Create菜单中创建Shader、C#脚本等,当创建完后可以修改文件名称,名称修改完成后文件内容对应的内容也被修改。
本文将重点以Lua脚本为例来解释如何扩展代码模板
不论是游戏或者应用软件开发,往往会忽略的一个点就是:维护更新日志。一般只有在做开源软件或者开源解决方案时才会重点去考虑,其实任何时候都应该关心,所以本文摘录了《如何维护更新日志》的内容,希望大家能认真了解一下
不论是游戏或者应用软件开发,一般进行版本的管理都是重要的一步,所以本文摘录了《语义化版本 2.0.0》的内容,希望大家能认真了解一下版本号的管理方式
在编辑EditorWindow的时候,某些情况下,我们希望打开的窗口相对于Unity编辑器来说居中显示,一般情况下通过new Rect(0, 0, Screen.currentResolution.width, Screen.currentResolution.height)获得的是主显示器窗口的尺寸,但是如果Unity窗口非全屏或者使用多个显示器做开发,则无法得到正确的位置。
本文将介绍一种通过反射方式可以得到Unity主窗口位置信息的方法,同时也会提供对应的扩展实现以简化将EditorWindow居中显示
使用NUnit测试时需要借助其提供的一些标签,以用来指定哪些类是测试类,测试类中哪些方法是测试方法等等。本文中将简要的介绍一些常用的属性标签
在传统软件开发过程中,能够编写单元测试用例是一个需要必备的技能。但是到游戏开发后,进行单元测试往往被忽略掉了,很多技术开发基本上都无法编写测试用例。造成这一问题的原因一来是由于游戏行业开发时间太短,往往都在加班赶进度,慢慢的整个项目组中进行单元测试逐渐被忽略,对于服务器端的开发还好,经常会看到服务器端的同学进行着单元测试,但是对于客户端来说基本上已经忽略掉这一步的必要操作了,甚至很多客户端同学都不知道什么是单元测试,以及如何进行单元测试。
介于上述的原因,本文将以多个章节的形式,对于如何在Unity中使用NUnit进行单元测试进行简要的描述,希望能够对NUnit有一定的了解
NUnit提供了一些辅助函数用于帮助判断某个被测试的函数是否正确执行,通常我们把这些函数统称为断言。使用这些断言可以判断条件是否为真、两个数据是否相相等或者不等、或者其它的一些情况。后面的内容将详细的介绍NUnit提供的断言(Assert)方法
NUnit最常用的断言主要集中在NUnit.Framework.Assert类中,对于集合的断言在NUnit.Framework.CollectionAssert类中进行了扩展,对于目录的断言在NUnit.Framework.DirectoryAssert类中进行了扩展,对于字符串类的断言在NUnit.Framework.StringAssert类中进行了扩展,对于文件类的断言在NUnit.Framework.FileAssert类中进行了扩展。
对于早期在互联网开发时,尤其是对服务器开发来说进行编写测试用例进行测试是非常有必要的,但是目前在游戏开发中,对于单元测试很多公司或者团队是基本忽略的,其实也不是开发者不希望进行单元测试,只是由于开发时间或者重视度不够才会忽略了测试用例的编写。
但是本文中将强调:
对于NUnit的话,无论是直接在VS中使用、直接测试DLL中的用例、也可以在Unity中直接使用,对于使用官方提供的工具一般情况下不会直接使用,所以本文中也将重点介绍如何在VS中使用NUnit以及如何在Unity中使用NUnit为主要内容
YAML作为一个开放式的格式,已经被很多语言所解析,由于本系列文章中有部分与Unity有关,所以此文中将重点介绍如何使用C#中的YamlDotNet库进行解析Yaml。
本文整理一下Unity进行截图的处理方式及获取屏幕宽高的使用方式,同时还添加了在Editor中如何得到对屏幕的截图处理,并没有特别深入的技术点,有需要的可以参考一下
在C#中的每一个类型都可以看做是一种资源,这些资源可以分为两类:
对于托管资源来说,由于受到CLR的管理,我们不需要关心资源释放的问题,完全可以依赖于垃圾回收器来进行内存的管理,但是对于非托管资源来说,由于其不受CLR管理,使用完毕后,就需要显式释放这些资源。
对于非托管资源,则应该执行以下操作:
实现Dispose模式
这要求你提供 IDisposable.Dispose 实现以启用非托管资源释放,当不再需要此对象(或其使用的资源)时,调用者可以通过调用Dispose方法释放非托管资源
调用者忘记调用Dispose方法的情况下,需要提供一种方法来释放非托管多资源
本方将重点总结一下Dispose模式的实现方式及注意事项,同时会结合《编写高质量代码改善C#程序的157个建议》一书中的内容进行一下总结。
在项目开发中我们经常会创建很多不同的目录,以进行资源的管理,对于Unity项目中来,Unity规定了一些特殊的目录,其包含有不同的含义,有些与API的使用有关,有些会影响到脚本的编译顺序,本文将重点介绍Unity中的那些特殊的目录,以及脚本的编译顺序
Unity引擎对资源和对象序列化可以使用二进制进行存储,同时也可以使用YAML格式的文本文件进行序列化,本文中将对Unity使用YAML序列化进行详细的阐述,希望可以更加深入了解Unity的序列化
本文对YAML的基本概念及语法进行了详细的分析,尤其是对YAML的语法进行了详细的阐述,旨在希望通过本文能对YAML有一个基本的了解,能够书写YAML文档。
YAML独立于JSON、XML等文本格式,逐渐被大家熟知。在Unity引擎中,可以设定序列化采用YAML语言,更是加大了对于YAML的使用。本文从YAML的基本概念、基本语法、Unity中如何进行序列化、及如何使用C#操作YAML几个方面进行详细的阐述,希望能够和大家一起学习YAML。
VS做为C#开发来说是非常棒的IDE工具,其功能的强大之处足以满足整个开发的要求,不过某些时候(比如考虑到要使用自动编译工具,对项目进行自动编译部署之类的)还是希望能使用命令行对C#的项目进行编译,从而实现自动化处理,幸运的是VS也已经考虑到了这个问题,提供了devenv工具进行处理。
MarkDown是一个在Web上使用的文本到HTML转换工具,可以通过简单、易读易写的文本格式生成结构化的HTML文档。对于MarkDown来说其设计的目标是【易读易写,成为一种适用于网络的书写语言】。MarkDown相对来说非常简单,可以花费很少的时间就能掌握,所以希望能通过这一篇文章能共同学习好MarkDown使用
本文内容摘自<类型参数的约束(C# 编程指南)>
进一步介绍C#使用泛型时类型参数的约束