Unity 垃圾收集最佳实践

前言

最近在搞的一个 Unity 项目是以插件形式运行在服务端的,对内存碎片问题有比较高的要求,正好有机会深入学习了下 Unity 的 GC。这篇文章便是从 Unity 2019.4 官方文档 Garbage collection best practices 翻译、摘要而来。

正文

自动内存管理让你写起代码时又快又简单,还能减少出错。但是这种便利有可能带来性能影响。为了优化代码以提高性能,你必须避免频繁触发 GC 的情形。

阅读更多

使用 Unity 开发 Android VR 应用系列之四——用 ScriptableObject 实现预加载

ScriptableObject 是一个数据容器类,可以用它来存储与类实例无关的数据。ScriptableObject 一个主要用途是利用它存储共享资源(比如 Prefab),减少无谓的复制,降低内存使用。

比如说,场景 A 和场景 B 都需要一个登录对话框。常规做法是创建一个 Prefab,分别在 A 和 B 中各自实例化;为了节省内存,可以在 ScriptableObject 中实例此 Prefab,在运行时将此 Prefab 实例添加到 A/B 场景中。

ScriptableObject 最典型的一个应用场景,便是用它来实现预加载了。

阅读更多

使用 Unity 开发 Android VR 应用系列之三——实现场景管理器

0. 需求分析

绝大多数应用里,都会有类似的业务逻辑:从 A 页面跳转到 B 页面,执行一系列操作后返回 A 页面。

这看似寻常的操作流程,Unity 是不能天然支持的。Unity 的 SceneManager 和 Android 的 activity stacks 在”页面”管理策略上大概有以下不同:

阅读更多

使用 Unity 开发 Android VR 应用系列之一——开发环境设置

0. 读者定位

  • 熟悉 Android 开发
  • 对 C#/.NET 有一定了解
  • 想学习如何通过 Unity 开发 Android 应用

Unity 是微软旗下的跨平台游戏/应用开发工具,C# 自然成为其首推支持的前端开发语言。C# 虽是从 Java 脱胎而出,经过近二十年的独立发展,已经成长为一门明显优于 Java 的现代化语言(这当然是我个人的主观见解)。我也发愿以此项目为起点,重新掌握 C#/.NET 的技术体系。

阅读更多

在 Unity 项目中使用 OpenFileDialog 实现选择文件功能

开发阶段用的是 UnityEditor.EditorUtility.OpenFilePanel() 函数,简单易用。但是如其名所示,UnityEditor 只在 Unity 编辑器内可见,尝试 build 出 Windows 下 standalone 包时会报编译错误。

解决办法是用 mono 库下的相应功能实现打开文件。

阅读更多