说明
- 本文的目的在于记录、总结和分享 Unity3D 游戏开发过程中遇到的问题和解决办法。
- 本文所涉及内容具有局限性:对应的引擎版本为 Unity2019 ,其问题在当前最新版本中不一定存在,其解决方案可能并非唯一的、最正确的、很完善的,乃至可能已经失效了。
- 个人经验,仅供参考。如有谬误,欢迎指出。
软件使用
Unity
- 手动激活时,点击“保存许可证申请”,无反应。 打开 development tool,有报错: main.js:9 Uncaught (in promise) TypeError: Cannot read property '2' of undefined
- 删掉 hub logs 那个文件夹所在的目录(C:\Users<username>\AppData\Roaming\UnityHub), 卸载干净之前的 unityhub (在windows程序管理中找到并卸载),重装(需要联网)。
- 请问我自己编的 Unity2019.3.15f1 能用 SONY 下载的 2019.3.15f1 配套的 PS4Support 么?我这边安装 support 时会出错目录设置到 data 也是
- 建议把之前装好的 Support 文件夹拷贝到 build 目录下
- 如何查看及取消 Unity Key 正版激活码对某些机器的授权
- 无法连接到 Unity 许可证服务器
- Unity 编译错误,怎么还原怎么重启都无效,查看 svn 有很多 normals 的修改
- 在根目录checkformodification,选择这些 normals 的文件后 switchtoparent 即可
- 自己编的 UNITY 资源导入耗时太久
- 自己编 Release 版导入资源, Debug 版调试资源。 Release 导入后 Debug 打开时不会触发重新导入
Visual Studio
- Unity C++源码无法命中
- 用 Attach To Unity 时C#源码可以命中,用 Attach To Process 时 C++ 源码可以命中
- 请问 Visual Studio 的源码工程没有出来是怎么回事?之前的版本有的,2019.3.15 这个没有
- 一般都是先 prepare ,配置好环境,或者直接调用下 jam ProjectFiles 看看
- D:\XXX\unity20190315f1\artifacts\Unity\Win64_dev_m_ut_d\Editor_Src_5.cpp: error C2855: 命令行选项“/source-charset”与预编译头不一致,请问这个是咋回事? 编译 Unity 的 editor 版本
- 对于Unity 引擎编译出现这个问题,我的解决方案是: 编译时把lump关掉,如:perl build.pl --lump=0
- 对于 UE 引擎编译出现这个问题,我的解决方案是(全部操作一次):
- 环境变量中干掉CL,重启电脑;
- (通过 Visual Studio Installer )卸载 Visual Studio 的中文语言包且安装英文的;
- 系统“语言设置-语言-管理语言设置-更改系统区域设置”改成“英文(美国)
- (通过 Visual Studio Installer )卸载 Visual Studio 的中文语言包且安装英文的;
- 系统“语言设置-语言-管理语言设置-更改系统区域设置”改成“英文(美国)”
- @progress '编译c++源代码…“22%[2/9] cl:命令行错误 D8016: '/utf-8'和'/source-charsetutf-8' 命令行选项不兼容
- 把环境变量中的 utf-8 去掉, 删干净然后重启机器
- Visual Studio debug Unity 时启动耗时过长
- 从菜单进入“调试-附加Unity调试程序”,可不用再编译直接调试
- Visual Studio 企业版
- Visual Studio 装企业版,可以使用 IntelliSence 以及建模等高级功能。 Community 版 并不提供 Codelens 功能
- 快捷键:
Ctrl+,
跳转到符号
Ctrl+[
定位到解决方案管理器
* 关注错误列表:里面有EditorConfig 的代码规则错误提示image
* 好用的插件
* Tsvn(可以在Visual Studio中直接查SVN log/blame)
* AssistX(增强代码提示、代码着色等)
- 用 Visual Studio 打开工程代码文件后发现无法定位到对应的文件
- Unity3D-Editor-Unity Preferences-External Tools-External Script Editor选择对应的Visual Studio(如Visual Studio 2017(Community))
- Visual Studio 解决方案视图中显示当前打开的文件和层级等
- 工具-选项-项目和解决方案-常规-勾选“在解决方案资源管理器中跟踪活动项”
开发
- 资源 import 或打包 assetbundle 时提示 "Unrecognized assets cannot be included in AssetBundles" 且无法打包到 assetbundle 中导致资源无法加载。
- 检查对应资源是否真有问题,如贴图磁盘大小不对导致PS4平台不兼容不识别、预设等文件内部因为冲突没解决好导致预设被破坏了(可能SVN状态不是冲突的但是文件里边有冲突标记)。如没问题,用 Unity 打开工程后重新导入一下相关资源。
- Unity asmdef 存在但是就是无法调用里边的方法
- 把这个 asmdef 设置为 autoreference 或者 把想调用它的 asmdef 勾选 override references,选择目标 asmdef
WaitForEndOfFrame
不执行
- Switching from the Game view to the Scene view will cause WaitForEndOfFrame to freeze. It will only continue when the application is switched back to the Game view. This can only happen when the application is working in the Unity editor.
new Uri(new StackTrace(true).GetFrame(0).GetFileName());
获取的程序执行路径是旧的工程的路径
- 删除项目下的 DLL 让 Unity 重新生成即可
- 查看行为树
- 选择对应模型预设 => open其上的 behavior =》 选择对应节点 =》 右键 expand 展开这个节点
- 3D场景中写字
- 资源导入时内存泄露一直上涨最终导致编辑器崩溃
- 编辑器下批量资源处理时也要定时清理内存,AssetDatabase 的很多操作诸如 GetMainAssetTypeAtPath 等都会消耗内存,当一次编辑器操作涉及很多资源时,积累的内存开销可能很大最终导致内存溢出而崩溃。 可考虑定时清理不用的编辑器内存,调用如下方法:
if (System.DateTime.Now.Second % 3 == 0)
{
Debug.LogFormat(""UnloadUnusedAssetsImmediate Second:{0},i:{1}"", System.DateTime.Now.Second, i);
System.GC.Collect();
EditorUtility.UnloadUnusedAssetsImmediate();
}