1. 程式人生 > 其它 >Sublime Text 3 搭建 Unity3D 開發環境指南

Sublime Text 3 搭建 Unity3D 開發環境指南

Sublime Text 3 搭建 Unity3D 開發環境指南

Unity 引擎自帶的程式碼編輯器 MonoDevelop 是個十分笨重的大傢伙,它開啟C#指令碼的時候比較緩慢,而且還有個最大的缺點:醜。所以除了在Mac 上開發的同學沒辦法只能用 MonoDevelop 外(微軟已經將 Visual Studio IDE移植到 Mac 平臺,但然並卵只是 MonoDevelop 改名了而已),在 Win 平臺大多數人都使用 VS 作為程式碼編輯器,雖然 VS 的功能強大,但是用 Unity 的大部分時間的確只是在編寫程式碼,用不上 VS 的全部功能。所以使用現在流行的程式碼編輯器變成了 Unity 程式碼編寫的另外一個比較便捷的解決方案。

我試過了 Sublime Text 3、Atom 以及 Visual Studio Code 作為程式碼編輯器,但是最後我選擇了ST3。選擇這個的原因也很簡單:開啟速度快、有良好的智慧程式碼提示(通過 OmniSharp 外掛)、強大的外掛庫以及最重要的因素:漂亮!Sublime 的確能夠成為程式碼編輯器的顏值擔當,通過使用自己喜歡的主題外掛,Sublime 可以變成你想要的任何配色。廢話不多說開始弄吧。

1. 安裝 Unity3D

開啟 Unity3D 的官網,選擇 Personal 版本,下載和安裝極其簡單就不細說了。

 

2. 安裝 Mono Development Kit

Mono 是安裝 OmniSharp 必備的 runtime。其實不僅 OmniSharp 整個 Unity 都依賴 Mono。開啟

Mono 專案的官網,選擇對應的平臺下載安裝。

 

3. 安裝 Sublime

開啟 Sublime 的官網,根據自己的平臺選擇對應的版本。Sublime 是一款收費軟體但是可以允許你無限試用,還是很良心的。

 

4. 安裝 Package Control 外掛

Sublime 自身是不帶外掛管理器的,為了方便日後我們安裝其他外掛,我們需要最先安裝外掛管理外掛 Package Control。這個外掛安裝有兩種方式,一種是簡單的自動安裝,一種是手動安裝。這裡我推薦自動安裝。

首先開啟 Sublime Text,在選單欄上選擇View > Show Console選項或者使用快捷鍵ctrl+`

開啟編輯器的控制檯。然後將下面的程式碼複製到控制檯的輸入框中。按回車鍵等待外掛自動安裝完畢。

import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f' + '1e3d39e33b79698005270310898eea76'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

外掛安裝成功後會彈出安裝成功 Readme 檔案。如果你想手動安裝的話,可以參考官方步驟自行安裝。

 

5. 安裝&配置 OmniSharp 外掛

安裝完外掛管理外掛後,使用快捷鍵ctrl+shift+p會彈出一個命令框,直接輸入install package回車鍵選擇第一個選項進入外掛列表(可能會需要等待一會,根據不同的網路有所不同),然後輸入OmniSharp在搜尋出的列表中選擇第一個按回車鍵確定。由於OmniSharp外掛比較大,所以需要等待一會。安裝完成後會彈出安裝成功的 Readme 檔案。

接著進行自動補全提示的設定。在命令框中輸入settings syntax或者在選單欄上選擇Preferences > Settings-Syntax Specific,在開啟的檔案中加入以下Json程式碼:

{
"auto_complete": true,
"auto_complete_selector": "source - comment",
"auto_complete_triggers": [ {"selector": "source.cs", "characters": ".<"} ],
 }

6. 安裝&配置 C# Snippets

C# Snippets 是用來自動插入程式碼片段的外掛。這個外掛不是必須的,但是建議安裝。步驟和安裝 OmniSharp 外掛相同,在外掛列表中輸入C# snippets即可。

 

7. Unity 編輯器配置

設定 Sublime 之後就需要將 Unity 和 Sublime 關聯起來。開啟 Unity,可以新建一個空專案也可以隨便開啟一個專案進入編輯器介面。在選單欄上選擇Edit > Preferences...彈出編輯器設定視窗。在External Tools面板的External Script Editor下拉選單上選擇 Sublime Text。在下面的External Script Editor Args輸入框上預設會顯示"$(File)"引數,在參考 Unity 的官方文件後,我改成了"$(File)":$(Line)這樣在 Unity 的控制檯開啟 Sublime 的就會跳轉到對應的行數上。

Unity 編輯器的配置就完成了。

8. Unity 專案配置

Unity專案配置是最後一步了,OmniSharp 外掛需要根據配置檔案來確定專案的路徑,這樣才能正確的工作。依次進行以下操作:

  1. 首先在 Sublime 的選單欄中選擇File > Open Folder...開啟你的 Unity 專案檔案。
  2. 在選單欄中選擇Project > Save Project As會自動新建一個以.sublime-project為檔案格式的專案配置檔案,注意儲存為你同級目錄下*.sln型別檔案相同的名稱。例如你的專案下面有個Demo.sln檔案,那麼 sublime project 配置檔名也應該為Demo.sublime-project
  3. 把下方的Json格式的配置資訊寫入剛剛開啟的配置檔案中。
{
    "folders":
    [
        {
            "path": "./Assets",
            "file_exclude_patterns": ["*.meta"]
        }
    ],
    "solution_file": "./yourprojectname.sln"
}

其中solution_file是用來給 OmniSharp 讀取專案路徑的,必須要填寫你*.sln檔案的路徑。

folders則是配置左側 sidebar 的顯示設定,其具體設定的選項我摘抄了Sublime Text 3 文件的部分內容:

Folders 每個資料夾都需要有一個path(路徑), 和其它可選配置file_exclude_patterns, file_include_patterns, folder_exclude_patterns, folder_include_patternsfollow_symlinks。路徑是相對於project目錄的位置,或者完整絕對路徑。Folders也可以指定一個name配置,用於顯示在側邊欄裡。

之後儲存*.sublime-project檔案。並進行一下操作:

  1. 關掉 Sublime。
  2. 開啟 Sbulime。(沒錯就是需要重新載入 Unity 專案讓剛剛儲存的配置生效)
  3. 在選單欄開啟Project > Open Project選擇 Unity 專案內的*.sublime-project檔案。

做到這一步 Sublime 的開發環境就已經搭建完成了,如果以後在使用中遇到了新的問題,我將繼續把對應的解決辦法更新在這篇文章中 :)

==================================我是分割線=====================================

FAQ

1. 經常出現不想看到的程式碼 Warning 提示怎麼辦?

有時候 OmniSharp 的程式碼分析比較嚴格,有些正確的程式碼會提示 Warning 看著比較煩,那怎麼關掉那些你不想看到的 Waring 提示呢。在選單欄選擇Preferences > Browse Packages...,在彈出的資料夾中開啟OmniSharp > PrebuiltOmniSharpServer > config.json檔案,找到配置檔案中的IgnoredCodeIssues條目。預設的配置如下:

"IgnoredCodeIssues": [
    "^Keyword 'private' is redundant. This is the default modifier.$",
    ".* should not separate words with an underscore.*",
]

通過新增對應 Waring 提示字串來忽略對應的 Waring 提示。新增的方式為正則表示式,如果想手動自己新增的話需要學習一下如何使用正則表示式。下面的是我自己用的配置,參考了網上其他人的配置。如果嫌麻煩的話可以直接複製到自己的config.json檔案中。

"IgnoredCodeIssues": [
    "^Keyword 'private' is redundant. This is the default modifier.$",
    ".* should not separate words with an underscore.*",
    "^Redundant argument name specification$",
    "^Convert to '.*' expre.",
    "^Use 'var' keyword$",
    "^Name should have prefix.",
    "^Redundant ToString.",
    "^Initializing field by default value is redundant$",
    "^Parameter can be IComparable$",
    "^Convert to constant.*",
    "^Variable could be moved to a nested scope$",
    "^Method never reaches its end or a 'return' statement.$",
    ".* should start with an upper case letter.*",
    "^after '_' a lower letter should follow.*",
    "^Assignment is redundant.*"
]

修改完成之後記得儲存,重啟 Sublime。

2. 我的程式碼後面出現很多CR標誌怎麼辦?

同樣可以在上個問題提到的config.json檔案中配置,找到TextEditorOptions條目,將eolMarker選項設定為\n如下面的程式碼所示:

"TextEditorOptions": {
    "tabsToSpaces": true,
    "tabSize": 4,
    "indentSize": 4,
    "continuationIndent": 4,
    "labelIndent": 0,
    "eolMarker": "\n", 
    "indentBlankLines": false,
    "wrapLineLength": 80
  }

3. 如何關閉輸入override關鍵字時彈出提示?

當輸入override時,OmniSharp 會智慧提示可以重寫的方法,本來這個功能挺有用的,但是自動產生的方法程式碼還得手動修改比較麻煩,還不如自己寫來得快呢。關閉彈出提示沒有對應的配置檔案可以設定,需要我們自己動手了。

第一步,開啟OmniSharp > OmniSharpSublime.sublime-settings檔案,在配置檔案中加入"omnisharp_show_override_completion": true。最終配置如下:

{
    "omnisharp_response_timeout": 100,
    "omnisharp_auto_start": true,
    "omnisharp_server_config_location":"",
    "omnisharp_onsave_codecheck": true,
    "omnisharp_onsave_showwarningwindows": true,
    "omnisharp_onsave_showerrorwindows": true,
    "omnisharp_show_override_completion": false
}

第二步,開啟OmniSharp > listeners > overridelistener.py檔案,在以下程式碼中加入對應的程式碼片段

def on_modified(self, view):
    if not helpers.is_csharp(view):
        return
    if bool(helpers.get_settings(view, 'omnisharp_show_override_completion')) == False:  # 新加入的程式碼
        return;                                                                          # 新加入的程式碼
    pos = view.sel()[0].begin()
    if pos >9: #override 
       reg = sublime.Region(pos-9, pos)
       keyword = view.substr(reg).strip();
       if keyword =='override':
          view.run_command('omni_sharp_override_targets')

最後記得儲存,重啟 Sublime。