- 博客(5)
- 收藏
- 关注
原创 学习Unity内存优化笔记
主要说说Mono托管内存的优化,其实主要是对GC的优化。1.内存的分配和回收机制首先C#数据类型有值类型(int、struct等)和引用类型。其中值类型分配在堆栈上(不涉及GC),引用类型分配在堆区(涉及GC)。堆栈上的分配和回收都是简单而且快捷的。当数据存储的时候,只需要简单的在堆栈后扩展,数据失效的时候,只需要移除即可。至于在堆区的存储和回收则是复杂而且缓慢的。当需要在堆区存储一个对象的时候:...
2018-05-10 19:02:27
331
原创 学习Mono与Unity3D关系的笔记
首先来说说Mono,Mono是Xamarin公司开发的跨平台 .NET运行环境,是.NET框架的另一种实现。区别在于,它可以跨平台。(Unity的跨平台特性依赖于Mono)再来看看Mono的组成。1.C#编译器。最新的Momo版本(5.0+)c#编译器完全兼容c#4.0以上,我使用的是Unity3D,2017.3.1f1版本,它使用的是Mono2.0+版本,它的编译器(mcs)就不支持c#4.0以...
2018-05-05 18:00:17
4233
原创 探究Unity代码的执行顺序(1)
今天在写代码的时候,动态加载了一个游戏物体(游戏物体上挂载了一个脚本),突然想到一个问题,即代码的执行顺序。动态加载游戏物体的那段代码并没有继承自MonoBehaviour。为了简单起见,动态加载游戏物体的那段代码叫做A代码。挂载在游戏物体上的那个脚本叫做B脚本。那么A代码之后的那些代码和B脚本中的代码执行的顺序是怎么样呢?这是在A代码之后的代码一个简单的循环。这是测试结果:根据结果我们可以知道,...
2018-05-03 22:49:09
700
原创 对Socket通信中BeginReceive方法的一些理解
在学习Unity的网络通信的时候,客户端和服务器端使用Socket通信。其中用到了不少Socket的方法。先看看Receive方法,Receive方法的主要参数是传入一个接受数据的byte数组。查看文档可以得知:如果没有可读取的数据,则Receive方法将一直处于阻止状态,直到数据可用,除非使用 Socket::ReceiveTimeout 设置了超时值。 如果超过超时值,Receive 调用将...
2018-04-26 21:32:00
21373
6
原创 对Unity中的多线程的一些理解
大多数游戏引擎都是单线程的,Unity也不例外。为什么使用单线程,原因主要为:游戏中画面更新和逻辑更新的时间点必须有确定性,必须严格按照帧序列进行同步。当然,多线程也能实现,但是同步问题比较麻烦,会加大编程难度。Unity中有大量的异步机制,比如:异步加载资源,异步加载场景。SceneManager.LoadSceneAsync("xxx"); 这段代码就是异步加载场景。(异步加载场景一般是在一...
2018-04-26 19:55:36
3318
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人