LINUX.ORG.RU
ФорумGames

Запуск юнити-игр под линукс

 , ,


2

1

Есть одна игрушка, хочу её запустить под линукс. Ругается на отсутствие mono.dll. Если скачать и подложить, ругается на отсутствие метода: «function unity_mono_reflection_method_get_method not found».

Ранее Psych218 советовал: «нужно просто unity-player нужной версии положить вместо виндового и всё». Но что-то никакого unity-player я не нагуглил. Есть девелоперская версия: https://store.unity.com/ но там минимум 2.1 Гб надо на установку, что как бы не вдохновляет.

★★★★★

Для начала нужно узнать версию Unity3D. Сделать это можно так:

cat '*_Data/*.assets' 2> /dev/null \
| grep -a -v 'Archive' \
| head -2 \
| tail -1 \
| grep -E -a -o '[0-9]+\.[0-9]+\.[0-9]+[0-9a-zA-Z]+' 2> /dev/null

Ну или открыть любой файл из GameName_Data/*.assets в hex-редакторе или даже текстовом редакторе, и там где-то в самом начале написана версия.

Под GNU/Linux Unity3D есть с четвёртой версии. Если там четвёртая, то тебе очень повезло, «портировать» так удастся точно. Если пятая, то скорее всего удастся, но иногда бывают проблемы с шейдерами (aka «розовая дристня по всему экрану»).

Версии бывают трёх типов: с буквами f, p и b. Если там есть f или p (например 5.4.1f1), то выкачать нужный плеер можно этим скриптом. Если же там b, то хз как искать, придётся либо выкачивать с сайта юнити, либо выискивать линуксовую игру с такой же версией. У меня есть коллекция версий плеера, так что если надо будет b, она может у меня оказаться.

Скачав плеер, нужно просто переименовать player.x86 в GameName.x86, player.x86_64 в GameName.x86_64 и положить их в корень игры (где сейчас лежит GameName.exe), а содержимое player_Data скопировать в GameName_Data игры (БЕЗ замены файлов, только новые которые добавить).

После этого можно пробовать запускать.

Если игра из стима, то там может быть стимовская DRM с помощью libsteam_api.so. Поскольку играть в «портированную» таким образом игру через линуксовый стим всё равно не выйдет (он просто не знает о новоиспечённой линуксовой версии), то если это DRM использовано, надо будет обойти ещё его. Благо делается это элементарно уже готовой «таблеткой».

Psych218 ★★★★★ ()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от Medar

Я-то в курсе. Там эту инструкцию обновить бы чутка не мешало, добавив упомянутые выше скрипты для удобства.

Psych218 ★★★★★ ()
Ответ на: комментарий от Psych218

Приведённый выше скрипт не сработал.

Во-первых, похоже, что cat '*_Data/*.assets' делает не то, что вы предполагаете. Эта команда даёт пустой вывод в моём случае, хотя такая директория и такие файлы есть.

Во-вторых, После неудачи на предыдущем шаге, я сменил текущую директорию на директорию с _Data на конце имени и выполнил такое: grep -a -v 'Archive' -R ./ --include=*assets | head -2 | tail -1

Получил примерно следующее:

./sharedassets0.assets:?Q???'Qy??h?pX??:???"????|?????????K????????

Не всё так просто, видимо. Вместо символа вопроса специальные символы ascii, движок ЛОРа не позволяет их обрабатвыать.

next_time ★★★★★ ()
Ответ на: комментарий от next_time

Открой в vim или hex, должна быть видна версия. Примерно так и так. Если ничего похожего нет, это Unity3D 3.x (в четвёртой, пятой и 2017 точно есть всегда). Третья версия была Windows-only. Игра старая?

Psych218 ★★★★★ ()
Ответ на: комментарий от next_time

после f ещё циферка должна быть. Вот соответственно скриптом по ссылке выкачивай.

Psych218 ★★★★★ ()
Ответ на: комментарий от next_time

и дал ссылку на неоткрывающийся рутрекер, лол

2017 год на дворе, живя в РФ давно пора научиться пользоваться TOR'ом. Но ок, вот на зеркало: https://rutracker.cr/forum/viewtopic.php?t=5324346

Там почему-то картинка не отображается (хотя на .org отображается нормально). Короче, зеркала на .cr, .net и .nl в клирнете, а также в .onion и .i2p

Psych218 ★★★★★ ()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от SysoevDV

нужно пользоваться незацензуренным интернетом

И где ж его взять в РФ? Спутниковый что ли подключить предлагаешь?

Psych218 ★★★★★ ()
Ответ на: комментарий от next_time

Я обычно анонимайзерами пользуюсь, но этот сайт даже так не открывается.

У меня все сайты прекрасно открываются через Tor. А с помощью foxyproxy удобно их вносить в список, чтобы ничего не переключать в руками, а просто на них всегда ходилось через tor.

Psych218 ★★★★★ ()
Ответ на: комментарий от next_time

Не должно так быть. Моно там находится всё там же в GameName_Data и качается вместе с плеером. Ты точно всё из плеера перенёс?

Psych218 ★★★★★ ()
Ответ на: комментарий от Psych218

Взял девелоперскую версию, оно попросило mscorlib.dll Скачал, выдало.

 Assertion at class.c:5045, condition `class->field.count == 0' not met

Receiving unhandled NULL exception
#0  0x000000ffa82ec0 in (Unknown)
#1  0x000000ffa833b4 in (Unknown)
#2  0x000000ffa833c4 in raise
#3  0x000000ffa833d0 in g_free
#4  0x000000ffa83400 in g_free
#5  0x000000ffa83420 in mono_class_get_full
#6  0x000000ffa834e0 in mono_class_get_full
#7  0x000000ffa835d0 in mono_class_get
#8  0x000000ffa835f0 in mono_class_from_name
#9  0x000000ffa83a50 in mono_debugger_check_runtime_version
#10 0x000000ffa83ab0 in mono_print_method_from_ip
#11 0x000000ffa83b10 in operator new(unsigned int)
#12 0x000000ffa83da0 in std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
#13 0x000000ffa83e20 in _init
#14 0x000000ffa84390 in __libc_start_main
#15 0x000000ffa84400 in _init

=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================
next_time ★★★★★ ()
Ответ на: комментарий от next_time

Надо брать недевелоперскую withgfx

вот это. Всё из Data — в GameName_Data (можно даже с заменой), а LinuxPlayer 32-битный переименовать в GameName.x86, а 64-битный соответственно в GameName.x86_64 и положить рядом с GameName_Data и GameName.exe

Psych218 ★★★★★ ()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от next_time

Инструкция по «портированию» игр на движке Unity3D

Ребята толпой составляют решение, чтобы портировать игрушки и делать релизы на рутрекере.

Medar ★★★★★ ()

Через wine пускай.

anonymous ()
Ответ на: комментарий от next_time

rt.ru заменить на то, куда редиректит пров, может не работать если он блочит иначе

iptables --table raw --append PREROUTING --match string --algo bm --string 'Location: http://warning.rt.ru/' --jump DROP
iptables --table raw --append PREROUTING --protocol tcp --tcp-flags RST RST --jump DROP

anonymous ()

Это, к сожалению, никак. Это значит, что в игре использованы несовместимые вендоспецифичные шейдеры, вылечить можно только переписав их на обычные. Если есть версия игры под мак, то можно взять за основу её — там несовместимых шейдеров нет, они такие же, как в линуксе.

Psych218 ★★★★★ ()
Ответ на: комментарий от Psych218

Это не вендоспецифичные шейдеры, это баг nvidia, который существовал несколько лет, а потом они его ВНЕЗАПНО пофиксили.

steemandlinux ★★★★★ ()
Ответ на: комментарий от next_time

Оффтоп

Не сработало ибо пути в одинарных кавычках, поэтому вайлдкарды не заменились.

pon4ik ★★★★★ ()
Ответ на: комментарий от MC

В 17.2 точно есть квирк для фикса. А вот в 17.1 не факт что он есть и тем более в 17.0.6

Проверяется элементарно, запускаешь driconf и смотришь наличие игры Rust.

steemandlinux ★★★★★ ()
Ответ на: комментарий от steemandlinux

А если быть точнее, реализация OpenGL от NVIDIA делала некоторые вещи по-своему. Это не баг, это видение NVIDIA, как сделать лучше.

В драйвере 361.xx OpenGL сильнее подогнали под стандарты. Но можно установить старую реализацию, если передать инсталлятору специальный параметр.

anonymous ()
Ответ на: комментарий от steemandlinux

Спасибо.

Спасибо тебе, мил человек, заработало!

MC ()
Ответ на: комментарий от steemandlinux

А кто помнит, когда youtube еще не умел работать без flash, внезапно все стали сине-зелеными лицами, как аватары или Нэвэльный, и тоже nvidia отказывалась признавать баг долгое время?

Rupricht ★★ ()
Ответ на: комментарий от Rupricht

Они умудрились накосячить в своей реализации VDPAU, притом что это их API.

steemandlinux ★★★★★ ()
Ответ на: комментарий от Rupricht

Все ещё помнят, что шваободные драйвера целиком косяк, тк находятся перманентно в стадии написания. Но это почему-то норм, нужно подождать патч, $5-10летняя_игра_name отлично работает больше чем в 24фпс с начала этого года.

anonymous ()
Ответ на: комментарий от anonymous

В швабодных дровах было <100 ошибок в реализации opengl, в божественных nvidia >4000. Nvidia лохов разводит, рисуя циферки версии opengl, а реализует функции потом.

Я это еще понял, когда у меня была geforce 6600. Lightsmark не работал с драйверами 76, 96, но работал с драйверами 153, хотя все три мамой клялись, что у них есть opengl 2.1

Но туповатые поциенты со стокгольмским синдромом орут что вывсеврёти, либо унихсвойвзгляд.

steemandlinux ★★★★★ ()
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от next_time

и дал ссылку на неоткрывающийся рутрекер, лол

Что ты делаешь на этом ресурсе, если у тебя такие проблемы? Может тебе пройти на винфак?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.