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。

posted @ 2022-03-22 18:16  VindyLeong  阅读(467)  评论(0编辑  收藏  举报