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成功~
https://www.linkedin.com/in/river-wang-4118425b/
https://www.slideshare.net/riverwang54
本是個愛打電動的小屁孩
直到第一次看到FF7
就夢想有一天自己也能做出那樣等級的遊戲
但直到過了30歲才開始真的當遊戲人
雖然夢想還在遠方
但不願為了夢想而犧牲任何東西
因為另一個夢想就是當個普通人
2018年12月16日 星期日
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:
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
sudo apt-get install xxxx ...... (重複數十遍..)
如果要找更簡潔的安裝說明的話可以參考以下連結
https://www.paperstartgames.com/install-unity3d-in-ubuntu-18_04/
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. 惰性
我偶爾還是蠻想把收集的遊戲玩破關的.... -_-
總覺得能把自己的事業做好的人都很了不起,
我還差的遠了呀,
....
不過我還在期待獨立遊戲作, 夢想還沒停就是了...
想想會阻礙一個人工作狀態的事件因素其實還真多,
所以真的很佩服那些可以獨自完成獨立開發/研究的工作者,
到底他們怎麼把生活/玩樂/休息/工作等時間分配和平衡的,
這兩年來總結會影響我工作的主要因素有:
1. 家庭
想要專心工作, 又覺得平時分太少時間給家人有點愧咎,
最後總是兩頭空都沒有顧好的感覺.
2. 健康
長期的腰傷舊傷, 雖然長期休養好多了, 但仍無法久坐超過 1 個半小時,
輕微胃潰瘍復發時也蠻要命的,
太疲勞時有時容易感到較強烈心悸,
有時眼睛過敏造成太痛太癢,
3. 惰性
我偶爾還是蠻想把收集的遊戲玩破關的.... -_-
總覺得能把自己的事業做好的人都很了不起,
我還差的遠了呀,
....
不過我還在期待獨立遊戲作, 夢想還沒停就是了...
2018年5月18日 星期五
2 線段形成夾角之弧線 / 扇形表示法
去年離開模具然後跑去三角洲
後來在三角洲浪費將近半年時光
最後在去年底我才正式回到正常用腦工作的環境
一眨眼又是一年過去了
自從2017/ 12月下旬開始
我的 Indie 之路又中斷了 (又? 根本沒開始才對 XD
為了做好正職, 根本沒時間經營自己的 Indie 事業RRRRR
回到正題來聊一聊過去一個禮拜讓我頭痛好幾天的功能開發
3D 空間中對任意相連的 2 線段形成之夾角
產生對應的弧線或扇形來做視覺化表示
對我來說對這個問題我算是有相關經驗
但動手前我隱約可以感覺到
數學沒學好的我會感到很棘手
首先定義 input,
從 2 線段找到相連的點, 由相連點出發計算出形成夾角的 2 向量,
然後從內積結果來判斷誰是 lhs(left-hand-sided vector)與 rhs(right-hand-sided vector)
接著我的痛苦旅程開始
Unity 可以輕鬆幫我算出 2 個向量之間的夾角 Vector3.Angle()
透過角度代入公式我可以輕鬆計算出正確的弧線或扇形
Mathf.Cos(radian) * axisX + .Sin(radian) * axisZ;
(#這裡要特別感謝 周明倫 大神教學文章的 carry)
但頭痛的問題來了, 我要如何將那個扇形剛好放置在夾角的定位上?
第一次分析後扇形的圓心就是 2 線段相連點 ( <== 正確)
但還有扇形物件的旋轉矩陣要解
於是我天真的想把其中一個線段當成 transform.right,
把 angle = 0 的方向旋轉到 transform.right,
然後再把扇形的 normal 方向旋轉到 2 線段形成平面之法向量 ( Vector3.Cross(lhs, rhs) )
(我計算了 2 個旋轉 quaternion在相乘後找出旋轉矩陣)
經過這樣試驗一整晚, 我的旋轉怎麼 debug 怎麼錯
那幾天剛好狀況不好, 身體疲累, 最後頭痛到受不了只好收工去睡
睡醒後, 不知我是不是在睡夢中夢到解法 XD 突然豁然開朗
我想要解的旋轉矩陣就是 Transform.LookAt() 幫我做好的功能R
於是回頭 debug, 發現我的 lhs 和 rhs 就找錯了
if ( Vector3.Dot( lhs , rhs ) < 0 )
swap(lhs, rhs);
確定有正確的 lhs, rhs 接下來就是要計算 forward,
up = Vector3.Cross(lhs, rhs); // 2 線段所在平面的法向量
right = rhs; // 定義 right-hand-sided vector為 transform.right
forward = Vector3.Cross(right, up); // transform.forward
// transform.position = 線段相連點位置
剩下的就是交給 Transform.LookAt(transform.position + forward, up);
打完, 收工
最後心得是, 這種感覺只是初等幾何問題還困擾我這麼久
我果然是個銅牌R
後來在三角洲浪費將近半年時光
最後在去年底我才正式回到正常用腦工作的環境
一眨眼又是一年過去了
自從2017/ 12月下旬開始
我的 Indie 之路又中斷了 (
回到正題來聊一聊過去一個禮拜讓我頭痛好幾天的功能開發
3D 空間中對任意相連的 2 線段形成之夾角
產生對應的弧線或扇形來做視覺化表示
對我來說對這個問題我算是有相關經驗
但動手前我隱約可以感覺到
數學沒學好的我會感到很棘手
首先定義 input,
從 2 線段找到相連的點, 由相連點出發計算出形成夾角的 2 向量,
然後從內積結果來判斷誰是 lhs(left-hand-sided vector)與 rhs(right-hand-sided vector)
接著我的痛苦旅程開始
Unity 可以輕鬆幫我算出 2 個向量之間的夾角 Vector3.Angle()
透過角度代入公式我可以輕鬆計算出正確的弧線或扇形
Mathf.Cos(radian) * axisX + .Sin(radian) * axisZ;
(#這裡要特別感謝 周明倫 大神教學文章的 carry)
但頭痛的問題來了, 我要如何將那個扇形剛好放置在夾角的定位上?
第一次分析後扇形的圓心就是 2 線段相連點 ( <== 正確)
但還有扇形物件的旋轉矩陣要解
於是我天真的想把其中一個線段當成 transform.right,
把 angle = 0 的方向旋轉到 transform.right,
然後再把扇形的 normal 方向旋轉到 2 線段形成平面之法向量 ( Vector3.Cross(lhs, rhs) )
(我計算了 2 個旋轉 quaternion在相乘後找出旋轉矩陣)
經過這樣試驗一整晚, 我的旋轉怎麼 debug 怎麼錯
那幾天剛好狀況不好, 身體疲累, 最後頭痛到受不了只好收工去睡
睡醒後, 不知我是不是在睡夢中夢到解法 XD 突然豁然開朗
我想要解的旋轉矩陣就是 Transform.LookAt() 幫我做好的功能R
於是回頭 debug, 發現我的 lhs 和 rhs 就找錯了
if ( Vector3.Dot( lhs , rhs ) < 0 )
swap(lhs, rhs);
確定有正確的 lhs, rhs 接下來就是要計算 forward,
up = Vector3.Cross(lhs, rhs); // 2 線段所在平面的法向量
right = rhs; // 定義 right-hand-sided vector為 transform.right
forward = Vector3.Cross(right, up); // transform.forward
// transform.position = 線段相連點位置
剩下的就是交給 Transform.LookAt(transform.position + forward, up);
打完, 收工
最後心得是, 這種感覺只是初等幾何問題還困擾我這麼久
我果然是個銅牌R
訂閱:
文章 (Atom)