Preferences

I thought that by now game engines just have two extra checkboxes to ’build for Mac’ and ‘build for Linux’. Perhaps the signing requirements changed that, though.

Notably also, plenty of games work fine under Wine, but Steam client itself doesn't—on Mac.


We do use Unity that does lots of heavy lifting for you regarding porting to other platforms.

However, it's not always that easy as checking a box. For example some shader optimizations may be specific to DirectX. File system works differently (no "User/Documents" on Mac). Or issues with native libraries.

Our game does work on Linux Proton though, that was a surprise to us.

Proton with DV9K is - for a few games - faster than native windows. I don't fully understand it, but apparently the process of automatically rewriting shaders from DX to Vulcan can speed things up.
I think you mean DXVK.
It's pretty straightforward to have an abstraction for file systems with "special" file locations, it's been common in app sdks for at least a decade in a half. Unity doesn't have something like that?

Eg you would never use /tmp or %USER%/AppData, but call a function File::getPath(TempDirectory) or something like that.

It does, but I'm guessing it's just one simply understandable example.

C# has the very Windows-centric https://docs.microsoft.com/en-us/dotnet/api/system.environme...

Unity itself has the Application.*Path properties for some more general cross-platform-aware paths. https://docs.unity3d.com/ScriptReference/Application.html

Curious, why targeting DirectX, rather than Vulkan... it's not like you think about releasing on Xbox, do you ?
I remember writing some GPU instancing optimization that had #ifdef for DirectX 11+, but that code is old. Now I've learned how to go without it.

It's just all those small things that has to be right to make it work cross platform.

It’s not a matter of just having a build, it’s also about being able to support the users who use that build.
Cross-platform languages (and by extension -- engines and frameworks) rarely work exactly as advertised. The "just check a box" rarely holds true except for the simplest of programs.

In the old days, Java would advertise itself as being cross-platform (Write once, run anywhere!), but in practice, rarely worked that way.

The joke of that era was "Write once, debug everywhere!"
There are some hugely successful Java games, oddly enough.
Even Minecraft, which is written in Java I’ll give you that, uses LWJGL which does have natives that behave in odd ways across platforms.
Minecraft being the obvious example
RuneScape <3

This item has no comments currently.

Keyboard Shortcuts

Story Lists

j
Next story
k
Previous story
Shift+j
Last story
Shift+k
First story
o Enter
Go to story URL
c
Go to comments
u
Go to author

Navigation

Shift+t
Go to top stories
Shift+n
Go to new stories
Shift+b
Go to best stories
Shift+a
Go to Ask HN
Shift+s
Go to Show HN

Miscellaneous

?
Show this modal