找回密码
 立即注册
查看: 378|回复: 0

Unity 游戏开发问题和解决方案笔记

[复制链接]
发表于 2023-7-7 11:32 | 显示全部楼层 |阅读模式
说明


  • 本文的目的在于记录、总结和分享 Unity 游戏开发过程中遇到的问题和解决法子。
  • 本文所涉及内容具有局限性:对应的引擎版本为 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 正版激活码对某些机器的授权

    • https://id.unity.com/account/edit?_ga=2.207887634.1673004824.1587346066-582857687.1540344776

  • 无法连接到 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 &#39;编译c++源代码…“22%[2/9] cl:命令行错误 D8016: &#39;/utf-8&#39;和&#39;/source-charsetutf-8&#39; 命令行选项不兼容

    • 把环境变量中的 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场景中写字

    • Handles.Label

  • 资源导入时内存泄露一直上涨最终导致编纂器崩溃

    • 编纂器下批量资源措置时也要按时清理内存,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();
}

  • 打包时报错:Unrecognized assets cannot be included in AssetBundles

    • 资源文件有冲突(如 SVN 冲突),revert 掉就好。

  • 贴图明明存在却无法被打包到包里或读取。

    • Unity (截至 Unity2019.3.15f1)里 Texture 资源如果磁盘体积太大(非内存),如超过 64M , 则不能保证其能被正确识别。

  • AssetBundle 明明存在却无法加载出来

    • 查抄下 AssetBundle 的名字是否是大写,如是需要改成小写。因为 AssetBundle 名字设置后必定是小写的。

  • 委托在添加(+)前明明有先移除(-),却还是执行了多次。

    • 用类似方式对委托进行彻底清理:

OnSetAgeRestriction?.GetInvocationList()?.ForEachEnumerable(tempDelagate => OnSetAgeRestriction -= (Action<bool>)tempDelagate );

  • (Unity)子线程调用 Unity API 引发 crash。

    • 子线程只改削非 Unity API 如设置标识表记标帜或其他变量,在那些 Update 方式中通过判断标识表记标帜或变量去操作 Unity API。

  • Lua 静态和成员函数语法糖

    • Lua 里面 也有静态函数和成员函数的语法糖. 凡是静态函数, 都是 xxx.func(xxx) 凡是成员函数, 都是xxx:func(p1), 第二种, 相当于xxx.func(self, p1)

声明:本文来自公众号:Unity 与Unreal 游戏开发(GameDevLearning),转载请附上原文链接及本声明。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-2 14:49 , Processed in 0.151256 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表