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 可以变成你想要的任何配色。废话不多说开始弄吧。
打开 Unity3D 的官网,选择 Personal 版本,下载和安装极其简单就不细说了。
Mono 是安装 OmniSharp 必备的 runtime。其实不仅 OmniSharp 整个 Unity 都依赖 Mono。打开 Mono 项目的官网,选择对应的平台下载安装。
打开 Sublime 的官网,根据自己的平台选择对应的版本。Sublime 是一款收费软件但是可以允许你无限试用,还是很良心的。
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 文件。如果你想手动安装的话,可以参考 官方步骤自行安装。
安装完插件管理插件后,使用快捷键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": ".<"} ],
}
C# Snippets 是用来自动插入代码片段的插件。这个插件不是必须的,但是建议安装。步骤和安装 OmniSharp 插件相同,在插件列表中输入C# snippets
即可。
设置 Sublime 之后就需要将 Unity 和 Sublime 关联起来。打开 Unity,可以新建一个空项目也可以随便打开一个项目进入编辑器界面。在菜单栏上选择Edit > Preferences...
弹出编辑器设置窗口。在External Tools
面板的External Script Editor
下拉菜单上选择 Sublime Text。在下面的External Script Editor Args
输入框上默认会显示"$(File)"
参数,在参考 Unity 的官方文档后,我改成了"$(File)":$(Line)
这样在 Unity 的控制台打开 Sublime 的就会跳转到对应的行数上。
Unity 编辑器的配置就完成了。
Unity项目配置是最后一步了,OmniSharp 插件需要根据配置文件来确定项目的路径,这样才能正确的工作。依次进行以下操作:
File > Open Folder...
Project > Save Project As
.sublime-project
*.sln
Demo.sln
Demo.sublime-project
{
"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_patterns 和 follow_symlinks。路径是相对于project目录的位置,或者完整绝对路径。Folders也可以指定一个name配置,用于显示在侧边栏里。
之后保存*.sublime-project
文件。并进行一下操作:
Project > Open Project
*.sublime-project
做到这一步 Sublime 的开发环境就已经搭建完成了,如果以后在使用中遇到了新的问题,我将继续把对应的解决办法更新在这篇文章中 :)
==================================我是分割线=====================================
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。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删