2018年12月16日 星期日

Unity + native plugins on Linux

Unity engine中使用 managed/native plugins配合開發,
這是很便利和重要的開發工具,
不同的 OS環境下需要準備對應的 plugin library動態連結檔案,
Windows : .dll
Linux : .so
Mac OSX : bundle

以下就自己的經驗, 使用第三方 SimpleITK library,
(SimpleITK是我用到的 image processing toolkit library, 就先跳過介紹了)
如何準備 Linux OS環境下所需的 native plugins步驟.

1. 準備 source code
SimpleITK已經準備好 cmake可編譯的 source code makefiles.
較詳細的官方教學
https://itk.org/Wiki/SimpleITK/GettingStarted/Visual_guide_to_building_on_Linux

2. 準備 cmake
在 ubuntu 18.04 中 software center已經有 cmake (含cmake-gui)等我去一鍵安裝了, 真方便...

3. cmake building...
照著教學的步驟做(此步不詳述)
但因為我們需要透過 Unity engine開發, 所以設置參數中選取 CSharp wrapping enabled.
建置完成後取得 SimpleITKCSharpManaged.dll 與 libSimpleITKCSharpNative.so

4. 整合進 Unity
將 XXXXmanaged.all 與 XXXXnative.so 檔案放進 Unity project中的 Plugins專屬目錄下,
並注意好設置給 Linux環境專用,


差不多大功告成~


.
.
.

事情還沒完, 因為我使用 ubuntu 18.04 OS環境編譯出 library binaries,
因此在較舊的 ubuntu 14.04 OS 環境測試 standalone player app時便遇到問題,
舊 ubuntu 14 OS中無法完全相容 ubuntu 18編譯出來的 libs,
在 app啟動無法成功載入 libSimpleITKNative.so, 得到以下 log:
./libSimpleITKCSharpNative.so: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./libSimpleITKCSharpNative.so....

google後決定安裝 ubuntu 14.04 64bit OS, 並安裝 cmake-gui, 來編譯 library binaries,
ubuntu 14 OS環境下安裝 cmake-gui稍微麻煩一點,
https://askubuntu.com/questions/1020168/how-to-build-cmake-gui-on-linux-from-source
善用 Google, 佛心教學真的頗多.

最後從 ubuntu 14編譯出來的 library binaries取代之後,
便可成功載入 libSimpleITKNative.so 檔案, 並且測試 app成功~

Unity engine editor on Linux

前一陣子因為有需求, 嘗試在 Linux環境中使用 Unity engine,
Unity官方早期是有宣稱過支援 Linux OS的, 但其實近年已經悄悄拿掉,
目前官方只公布支援 Windows與 Mac OSX.
原因無它, 自然是因為 Linux分岐版本太多難以維護管理.

自己也算是 Unix系統新手/白癡
所以想說還是紀錄一下這一陣子以來在 Linux使用經驗上踩過的雷好了

1. 準備VM
首先因為手邊只有 Windwos OS (沒錯我一直很懶得學/用 Linux環境)
因此最快的方式就是使用 virtual machine工具,
鑒於以前慣用 virtual box, 這次想改玩 VMware,
故使用免費版 VMware workstation player
https://www.vmware.com/tw/products/workstation-player/workstation-player-evaluation.html

2. 安裝Linux OS
從官方論壇調查得知, 目前 Unity官方宣稱支援最穩定的是 ubuntu OS環境,
因此選擇 ubuntu, 初步測試先選擇安裝較新的 ubuntu 18.04 64bit
https://www.ubuntu-tw.org/modules/tinyd0/
現在的 virtual machine和 ubuntu安裝流程真的是有夠方便的,
感覺跟一鍵搞定差不多了


3. 安裝 Unity engine editor (for Linux)
參考以下官方討論串
https://forum.unity.com/threads/unity-on-linux-release-notes-and-known-issues.350256/
沒錯, 並沒有在官方網站上留下 Linux版本支援連結,
只剩下討論串的方式來發布新的 Linux版本 Unity engine...
總之裡面也算是有詳細介紹安裝教學,
而必備的 3rd party tool/app/libs 則是列出了一大堆..

The dependencies for Unity itself are:
  • gconf-service
  • lib32gcc1 (>= 1:4.1.1)
  • lib32stdc++6 (>= 4.6)
  • libasound2 (>= 1.0.23)
  • libc6 (>> 2.15)
  • libc6-i386 (>= 2.15)
  • libcairo2 (>= 1.6.0)
  • libcap2 (>= 2.10)
  • libcups2 (>= 1.4.0)
  • libdbus-1-3 (>= 1.2.14)
  • libexpat1 (>= 1.95.8)
  • libfontconfig1 (>= 2.8.0)
  • libfreetype6 (>= 2.3.9)
  • libgcc1 (>= 1:4.1.1)
  • libgconf-2-4 (>= 2.31.1)
  • libgdk-pixbuf2.0-0 (>= 2.22.0)
  • libgl1-mesa-glx | libgl1
  • libglib2.0-0 (>= 2.31.8)
  • libglu1-mesa | libglu1
  • libgtk2.0-0 (>= 2.24.0)
  • libnspr4 (>= 1.8.0.10)
  • libnss3 (>= 3.14.3)
  • libpango1.0-0 (>= 1.22.0)
  • libstdc++6 (>= 4.6)
  • libx11-6 (>= 2:1.4.99.1)
  • libxcomposite1 (>= 1:0.3-1)
  • libxcursor1 (>> 1.1.2)
  • libxdamage1 (>= 1:1.1)
  • libxext6
  • libxfixes3
  • libxi6 (>= 2:1.2.99.4)
  • libxrandr2 (>= 2:1.2.99.2)
  • libxrender1
  • libxtst6
  • zlib1g (>= 1:1.1.4)
  • debconf (>= 0.5) | debconf-2.0
  • npm
當然為了求穩, 我把上述的軟體清單全裝了一遍wwwww
sudo apt-get install xxxx ...... (重複數十遍..)
如果要找更簡潔的安裝說明的話可以參考以下連結
https://www.paperstartgames.com/install-unity3d-in-ubuntu-18_04/
總之我試著安裝了 Unity2018.1.3 與 Unity2018.2.7 (當時官方支援的最新版本)
兩個版本遇到的地雷點差不多,
照個教學一步一步做總之是把 Unity engine run起來惹wwww
可以編遊戲也可以 build player,
但每次開 package manager必定 crash...

為了開啟 coding IDE, 我選擇裝 visual studio code,
但每次重開 Unity editor都必須重新指定 preferences -> External Tools -> External Script Editor,
似乎沒有正確寫入 Unity editor preference...

4. 地雷筆記
這部分只是我將前陣子記錄下來的踩雷點存在 blog上
大部分我也沒再追蹤, 所以算是沒意義可以忽略ww
        = Unity engine editor啟動時有出現幾個 error logs, 也遇到 Unity官方 tutorial專案時會發生 crash的問題, 但開啟新的空專案或之前自己準備的 Unity專案時則沒有 crash. ERROR:browser_main_loop.cc(161)] Running without the SUID sandbox! (可忽略); ERROR:renderer_main.cc(227)] Running without renderer sandbox; ERROR:gpu_process_transport_factory.cc(402)] Failed to establish GPU channel.
        = 在 Unity editor中設定 preferences -> External Tools -> External Script Editor, 容易發生 Unity editor crash. 嘗試使用 sublime-text開啟 Unity script file (.cs), 但在更改 scripting codes/shader codes後返回 Unity engine editor時會發生 crash.
        = Unity editor中開啟 Package Manager必會發生 crash.
        = Crash core dump中可以發現訊息: VMware: vmw_ioctl_command error Invalid argument. 可能跟 VMware環境提供的 GPU driver運作有關.
        = Linux standalone環境會被 Unity engine自動認定為 UnityEngine.Rendering.GraphicsTier.Tier3 (高階硬體環境)
    - 測試 standalone player app在 ubuntu OS VM (VMware without "Accelerate 3D Graphics" enabled)環境下的運行情境. 初步測試因為 Unity Linux standalone player要求至少支援 OpenGL Core 3.2+ version, 所以 app啟動失敗.

2018年12月15日 星期六

回顧2018

因為忙碌, 這裡等於又停了 7 個月,

想想會阻礙一個人工作狀態的事件因素其實還真多,

所以真的很佩服那些可以獨自完成獨立開發/研究的工作者,

到底他們怎麼把生活/玩樂/休息/工作等時間分配和平衡的,

這兩年來總結會影響我工作的主要因素有:

1. 家庭
想要專心工作, 又覺得平時分太少時間給家人有點愧咎,
最後總是兩頭空都沒有顧好的感覺.

2. 健康
長期的腰傷舊傷, 雖然長期休養好多了, 但仍無法久坐超過 1 個半小時,
輕微胃潰瘍復發時也蠻要命的,
太疲勞時有時容易感到較強烈心悸,
有時眼睛過敏造成太痛太癢,

3. 惰性
我偶爾還是蠻想把收集的遊戲玩破關的.... -_-

總覺得能把自己的事業做好的人都很了不起,
我還差的遠了呀,

....

不過我還在期待獨立遊戲作, 夢想還沒停就是了...