【Unity3D/Linux】解决Linux无法运行Unity3D程序问题 您所在的位置:网站首页 unity3d运行 【Unity3D/Linux】解决Linux无法运行Unity3D程序问题

【Unity3D/Linux】解决Linux无法运行Unity3D程序问题

2022-12-29 21:31| 来源: 网络整理| 查看: 265

读前声明

    这里指的Unity,是Unity Engine(游戏引擎),不是那个Linux的Unity桌面,玩同音梗要 扣 钱 的。

我遇到什么问题?

   由于最近的项目要求,需要在云端Linux服务器上运行Unity3D程序,进行一些渲染任务。尝试ssh远程运行一下,却出现无法启动的问题。确认一下文件权限没问题后,再到Player.log查看,发现日志如下:

Unable to find a supported OpenGL core profile

Failed to create valid graphics context: please ensure you meet the minimum requirements

E.g. OpenGL core profile 3.2 or later for OpenGL Core renderer

    好家伙,直接的原因是OpenGL版本过低。我们再看看Unity的运行需求:

https://docs.unity3d.com/2019.4/Documentation/Manual/system-requirements.html

    所以各种安装猛如虎,整上了显卡驱动,桌面,远程工具等等。各个功能都正常,但是问题照旧,glxinfo依旧显示OpenGL差了一个版本号,Unity无法找到OpenGL渲染器。

xrdp的glxinfo

    由于需要跑渲染,Headless模式运行Unity程序是不行的。Headless模式,是禁用输入和渲染,适合做跑逻辑的服务器应用。

我怎么解决的?

    我发现xrdp和vnc连接云服务器,glxinfo打印的版本号都不一样,vnc下打印的OpenGL版本就低得多了:

vnc的glxinfo

    再结合之前查阅的Unity的论坛和Github的ML项目,发现有种现象就是远程连接云端,都是无法运行Unity程序,但是直连Linux都是没问题的。所以我觉得Linux的OpenGL版本,应该跟什么东西挂钩。然后ps -x查看一下系统进程,发现一个有趣的东西:

:数字,即关联的显示器id号

    由于Linux管理显示器方式比较特别,大部分服务器不会连接物理显示器。当你使用远程工具时,会启用一个单独的虚拟显示器。而你程序运行时的OpenGL版本,就取决于当前显示器的渲染器。远程工具一般是用CPU软件渲染器,如果这时调用的渲染器OpenGL版本过低,Unity程序就无法找到OpenGL渲染器。就算是满足OpenGL版本,也可能出现CPU满载,GPU在一边乘凉的情况。

    解决方式也很简单,我们这时只需要在调用GPU渲染器的虚拟显示器下,运行Unity程序即可。如果你看着教程安装Nvidia驱动,应该会有个修改Xorg设置的步骤。如果系统没有启动对应的显示器,直接运行Xorg启动就行。然后export DISPLAY:对应显示器id,切换到所需显示器,再运行glxinfo看看:

这下总算OK了感想

    这下让我感受到孤儿平台的可怕,估计自己去提问题等回复的时间,就够自己解决了。由于接触时间不长,也不好做系统性总结。唯一的教训就是不要傻傻跟着教程走,到后面才知道Linux的显示器,也是类似程序的东西,可以使用不同的OpenGL渲染器。特别是看到Unity需要X11的Gnome桌面环境,我前后装了几种版本的桌面(Linux的桌面也是类似程序来着),不小心把远程工具的设置搞错了,又反反复复装了几次远程工具。

    随着机器学习之类的项目增多,在Linux云服务器运行Unity发布的程序的需求也是跟着变多。但是我觉得,如果一开始就在官方论坛和Github找到合适的解决方案,那么能省下很多时间去做更多事情,而不是每个平台都要自己踩坑,让开发者自己自生自灭。不过现在能接触Unity不太相干的东西,那种陌生感还是挺有意思的。人如果不积极去尝试新事物的话,毕竟对于大人而言,时代变了,真的可能该食大便了。

    



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有