VSCode自动编译Unity C#脚本
·
Visual Studio Code(VSCode)是一款跨平台轻量级代码编辑器。
最初使用VSCode要追溯到2017年的TypeScript项目,由于支持语法着色,类型检查和静态编译足够出色(这很显然,VSCode 本身就是用 TypeScript 写的)。后来发现对于开发Unity项目也是很好的选择......而近几年更是成为开发者的首选IDE。
不过,我们仍会在实际使用过程中遇到的一些需补足的地方,比如下面要讲的这个问题。
痛点
在VSCode中修改Unity工程的C#代码之后,需要切回到Unity Editor,以便完成代码编译。
为了能够在修改代码之后,以尽可能短的时间(需要等待脚本完成编译)启动Play模式,我们会使用一些技巧,比如:
- 拆分程序集:这样只会编译被修改代码所在的程序集。这当然是一个本该做的事情,但不应该和当前的需求耦合。
- 离散化思想:不定时切回Unity Editor进行编译。但是如此一来,除了浪费额外的切换操作的时间,而且破坏了沉浸的开发体验。
改变
我们希望在VSCode中修改代码之后,按下Ctrl+S键就能够直接编译C#代码。
实现
可以分为三步:
一 创建Unity侦听器
创建一个CompileTriggerWatcher.cs脚本,放置于Assets目录下的一个Editor文件夹内。
using System;
using System.IO;
using UnityEditor;
using UnityEngine;
[InitializeOnLoad]
public static class CompileTriggerWatcher {
static string triggerPath = Path.Combine(
Directory.GetParent(Application.dataPath).FullName,
".compile_trigger"
);
static DateTime lastWriteTime = DateTime.MinValue;
static CompileTriggerWatcher() {
EditorApplication.update += OnUpdate;
}
static void OnUpdate() {
if (!File.Exists(triggerPath)) return;
DateTime writeTime = File.GetLastWriteTime(triggerPath);
if (writeTime != lastWriteTime) {
lastWriteTime = writeTime;
AssetDatabase.Refresh();
Debug.Log("[CompileTrigger] 检测到变化,已触发编译");
}
}
}
二 创建VSCode Task
在项目根目录创建 .vscode/tasks.json。
作用是在工作空间写(按Ctrl+S时)一个文件名后缀为.compile_trigger的触发文件。
{
"version": "2.0.0",
"tasks": [
{
"label": "Trigger Unity Compile",
"type": "shell",
"command": "echo ${datetime} > ${workspaceFolder}/.compile_trigger",
"windows": {
"command": "echo %date%%time% > ${workspaceFolder}\\.compile_trigger"
},
"presentation": {
"reveal": "never",
"panel": "shared"
}
}
]
}
三 按Ctrl+S保存C#脚本时,触发上述Task
- 安装 VSCode 插件 Trigger Task on Save
- 在 .vscode/settings.json 增加配置
{
"triggerTaskOnSave.tasks": {
"Trigger Unity Compile": [
"**/*.cs"
]
},
"triggerTaskOnSave.showNotifications": false,
"triggerTaskOnSave.delay": 100
}
验证:成功

更多推荐
所有评论(0)