Visual Studio 2013 设置成为 Unity 3D 默认编辑器的方法
最近很想看看游戏编程,无意中了解了unity3d和udk两个引擎,考虑到unity的可移植性较好,而且较易上手,所以尝试了下。 欣慰的是,unity支持c#语言,这使得我不用再单独学一门语言。只是,mono的编辑器实在是比vs差太多…… 于是想,是否可以用vs作为编辑器。 网上资料发现,u3d提供了使用vs作为脚本编辑器的支持,不仅仅是用vs打开,而是会自动建立sln文件,建立工程,加入引用,然后打开。这就相当方便了。
在u3d菜单里选择:Edit->Preferences->Externtenal Tools,在External Script Editor里选择Browse...,定位到C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe。OK! 回来双击cs文件,正常用vs2013打开了,很好很强大。
可是,好景不长。在一次windows弹出的更新中,不慎选中了VS2010 Shell的更新(因为装了Sql Sever 2012,这货的SSMS依赖于这个Shell)。 更新完毕之后,发现,再次双击u3d的cs文件时,用的是vs2010的shell打开的。 仔细检查过,我确信external script editor设置的是vs2013的路径,可是他依然奇迹般的打开了vs10。 后面我尝试了查找unity的注册表区域,设置path环境变量等一堆方法,都无济于事。
一狠心,将vs2010的那个shell卸载。心想这样可以了吧。结果更加悲剧,双击unity里的cs文件,虽然选的是用vs打开,但是,实际打开的确是mono develop那个编辑器。
于是百度,发现网上不少人遇到,偶遇有人说修复vs2013可以解决。尝试了下,又是一次一个多小时的等待,完全重装一遍没什么区别。果然,恢复了。
这样就完了吗? 没有! 之前说过,sql server 2012的 management studio依赖那个Shell 所以,之前卸载了shell,这个management studio便打不开了。没办法,只能恢复这个shell,本想找个shell的下载地址,只装这货,无奈网上找到的地址打不开,只好用sql2012的盘执行修复。好嘛,又是一个一小时的工程。
边修复,边考虑。既然之前修复vs2013可以恢复Unity打开的vs编辑器,那么这个打开那个编辑器的信息,应该不是unity记录的,而是vs记录的,而且99%是写在注册表里的。 那么,这次装vs2010 shell 必然也会导致这块区域再次被重写,从而导致之前修复vs2013带来的效果又失效。
一个小时后,sql恢复了,试了下unity,果然,变成使用vs2010 shell打开cs文件了。
再修复vs2013一遍? 开什么玩笑,时间就是金钱。 让我来找出你这块注册表区域吧!
祭出sysinternals工具集。至于这个工具集的来历我记得不很清楚了,好像说是微软官方的,不需要深究了。我只需要其中的一个工具:Procmon64.exe。 这是一个进程监视工具,可以监视进程的磁盘操作,注册表操作等。 添加几个筛选器,首先是process name is unity.exe,然后 result is success,最重要的 我们筛 operation is RegOpenKey和operation is RegQueryKey。 先清空一下。这时,回到unity,双击一个cs文件。 回到procmon,看到一堆注册表打开操作,经过观察,我们注意到一段区域:
打开 regedit,找到对应的键,发现下面就两个键:
其中,CurVer的键值只有一个默认,它的值是VisualStudio.DTE.10.0,而CLSID的键值也只有一个默认,他的值是{656D8328-93F5-41a7-A48C-B42858161F25},正是后面unity继续去访问的注册表位置使用的id,这个id也就是vs2010的id。
看来找到问题的症结了,首先把CurVer改成VisualStudio.DTE.12.0,然后,最重要的是找出vs2013的id,我们按照老思路来好了,找current_user->software->microsoft->visual studio,发现这里有两个版本的key,一个10.0,一个12.0,每个都是两个,其中一个是_config,在10.0_config里,我找到了这个id:
同理,到12.0_config里,找到ThisVersionDTECLSID,发现是{3C0D7ACB-790B-4437-8DD2-815CA17C474D},于是把这个值复制下来,回到之前的classes_root\visualstudio.dte\CLSID ,填入其中。 好了,大功告成,进unity,双击cs文件,果然用vs2013打开了。
总结起来很简单:就是将注册表下HKEY_CLASSES_ROOT \VISUALSTUDIO.DTE\CLSID的默认值改为{3C0D7ACB-790B-4437-8DD2-815CA17C474D}就可以了。