前言(廢話)
最近想試試搗鼓下游戲,於是看了一圈遊戲引擎(差生文具多了屬於是)。早前我挺喜歡 godot的,但是這社區有點爛,下北澤一樣臭。那就還是 unity吧,不過 unity相對重一點,可能我有時就在辦公室搞點小玩意,unity還是留着在家裏玩好了;那麼,跟 unity一樣,也是用 C#的 MonoGame,就成了一個我在辦公室摸魚的時候可以用 vim寫寫代碼的小玩具了(我感覺做 unity還是上 Visual Studio比較實際?)。
1. Vim 插件
基本上 Vim上面的 C#插件,就是 Omnisharp-Vim了,按gayhub上的説明,直接在 vimrc里加上
Plug 'OmniSharp/omnisharp-vim'
然後
PlugInstall
就完事了。
2. .Net環境與 MonoGame
2.1 最省事的做法-VS大法
- 安裝 VS2019/VS2022,
- 安裝 .net桌面開發套裝
- 工具->管理擴展->搜索安裝 MonoGame extension
以下是新建一個MonoGame項目的流程, 假設你用的是 powershell(或者其它shell):
- 創建一個新的目錄作為項目根目錄
mkdir NewFolder - 進入項目目錄
cd NewFolder - 使用 MonoGame模板新建項目
dotnet new mgdesktopgl
然後就會在 NewFolder下生成 .cs和 .csproj等項目文件。直接用 vs打開 .csproj運行一下,就是一個空白的窗口。
2.2 怨種做法
記述一下我一開始的操作,有緣人如果最後走通了,可以踢我一腳,指點一下
因為我一開始的想法是,能擺脱 VS工具鏈最好,這樣我在別的機器上部署,也可以省點工夫;所以如下面提到的,我是從 Massivesoft官網下的 .Net sdk,當然我的用來搗鼓的機器上也是裝了 VS2022的,不過只裝了C艹的工具。
基本按照MonoGame Tutorial來走:
- 直接上 massivesoft下載 .Net sdk, 安裝
1.1 此時 dotnet應該會寫入環境變量裏了,在終端輸入dotnet --info看看能不能找到,不能的話手動加一下 - 終端裏輸入
dotnet new install MonoGame.Templates.CSharp
順利的話,完成後面的 C#語言服務器安裝部分之後,就用 vim打開項目目錄,再打開 Game1.cs文件, omnisharp服務器就應該開始工作了
但是
當我第一次打開 Game1.cs文件,等了一會兒,沒啥動靜,於是
:OmniSharpOpenLog
看到它提示,omnisharp定位到了一個可用的VS,但是找不到可用的 .Net sdk,我試了添加 DOTNET_ROOT到環境變量裏也不行,合着有 VS的情況下,就認準它了?
一開始我是用 junction把 .Net安裝目錄(默認是 C:\Program Files\dotnet)鏈接到 VS的目錄下,但是似乎文件目錄對應不上,OmniSharp日誌裏還是各種錯;
然後我直接把 VS卸載了,再打開 Game1.cs(或者 Vim不關,用 :OmniSharpRestartServer也行),這回日誌裏直接寫找不到 MSBuild了。我查了一下,雖然.Net sdk本身就是帶 MSBuild的,但是要通過 dotnet來調用,本身沒有可執行文件。我試了在dotnet目錄下寫了個叫 MsBuild.bat的文件(裏面就是調 dotnet msbuild)去騙去偷吸,然而全被防出去了;
最後就沒轍了,老老實實用 VS Installer補上 .Net。
3. C#語言服務器
上面提到的 omnisharp-vim只是 omnisharp-rosly語言服務器在 Vim上的接頭人。按照 omnisharp-vim上的説明,你可以在 Vim的普通模式下輸入
:OmniSharpInstall v1.35.2 #或者什麼別的版本號
來安裝,但是我試了幾次,都不成功(國內網絡這一塊)所以我乾脆手動下載。找到對應平台的下載下來,放到你喜歡的目錄下,再把這個目錄放在環境變量 path裏就行。
3.1 坑
後面的朋友可能不會碰到,我之前搞完一套流程之後,omnisharp服務器死活讀不了項目,各種毛病
直到我使用
:OmniSharpOpenLog
日誌直到看到 #2676,然後下載了個 omnisharp-win-x64-net6.0 版本,就行了,wcnmd。