# Unity中实现动态编译C#脚本工具Roslyn C#-Runtime Compiler

> Roslyn C#是一个强大的工具，它使用了Microsoft的Roslyn编译器，允许在运行时加载程序集和C#脚本，使得向项目中添加模组支持或者进行游戏内编程变得非常容易。此外，Roslyn C#还包含了代码安全验证功能，允许你指定许多安全限制，以确保加载的代码符合规范，包括禁止使用非法的命名空间和类型。

- 原文：https://www.interestcreator.com/roslyn-c-runtime-compiler/
- 站点：https://www.interestcreator.com/
- 发布：2023-02-16
- 更新：2023-02-16
- 分类：Unity插件
- 标签：Unity实用工具、游戏、游戏开发工具

## 概要

Unity 运行时编译 C# 脚本的插件，基于微软 Roslyn 编译器，官方支持 PC、Mac 与 Linux，安卓需手动搬 Runtime 目录且无官方支持。

## 正文

![1676553901 f38a468e497336f](https://www.interestcreator.com/wp-content/uploads/2023/02/1676553901-f38a468e497336f.webp)

> Roslyn C#是一个强大的工具，它使用了Microsoft的Roslyn编译器，允许在运行时加载程序集和C#脚本，使得向项目中添加模组支持或者进行游戏内编程变得非常容易。此外，Roslyn C#还包含了代码安全验证功能，允许你指定许多安全限制，以确保加载的代码符合规范，包括禁止使用非法的命名空间和类型。这使得从未知来源加载第三方代码变得更加安全。

## 其中还包含了一个基于编程的小型游戏，游戏目标是通过编写代码来帮助老鼠从迷宫中出去。

![1676553897 1da057a5f65f08a](https://www.interestcreator.com/wp-content/uploads/2023/02/1676553897-1da057a5f65f08a.webp)

## 功能特点：

- 运行时编译和运行C#脚本
- 使用Roslyn C#编译器，利用最新的C#语言特性
- 快速执行。一旦编译，外部脚本将与游戏脚本一样快地运行
- 可以轻松添加模组支持
- 代码安全验证意味着可以识别并丢弃不安全的代码
- 代码安全性在失败时生成详细报告，包含使用了非法类型的信息以及外部代码中每个使用的位置
- 提供简单易用的API，支持程序集、类型和实例反射
- 支持使用脚本代理进行非具体通信
- 使用正确的方法（AddComponent、CreateInstance、new）进行自动类型构建
- 为快速反射提供了缓存的成员表
- 所有脚本和示例都按名称空间组织，以避免类型名称冲突
- 包含完全注释的C#源代码
- 提供了全面的API文档，以快速、简单地查阅使用

![1676553898 1e7c80a3e94559b](https://www.interestcreator.com/wp-content/uploads/2023/02/1676553898-1e7c80a3e94559b.webp)

**平台支持：**支持PC、Mac和Linux平台。

Roslyn C#也可能在其他平台上工作良好，但我们只会支持官方支持的平台。

**安卓平台：**安卓平台并没有官方支持，但是很多用户通过按照以下步骤，成功让该资产在安卓上运行：

在Project中，转到Assets/Plugins/RoslynCSharp/Runtime，将Runtime文件夹拷贝到Assets文件夹下。

确保您的项目中已经添加了所有依赖项。您可以在“Assets/Plugins/RoslynCSharp/Documentation/html/RoslynCSharp.html”中找到有关依赖项的信息。

将您的脚本文件放在Assets文件夹下的Scripts子文件夹中，确保它们都被编译。然后，您就可以将它们放到您的应用程序中了。

相关资源

- [强大的定制化运行时同步编辑工具Runtime Editor](https://www.interestcreator.com/runtime-editor)
- [Runtime Transform Gizmos-轻松实现游戏物件移动、旋转和缩放](https://www.interestcreator.com/runtime-transform-gizmos)
- [Colorinchis – Recolor at Runtime and Bake Textures Tool：支持6通道实时换色与纹理烘焙的Unity神器](https://www.interestcreator.com/colorinchis-recolor-at-runtime-and-bake-textures-tool)
- [Impostors – Runtime Optimization：Unity运行时3D模型转2D大场景性能优化工具](https://www.interestcreator.com/impostors-runtime-optimization)

## 常见问题

### 官方支持哪些平台？

PC、Mac 和 Linux 三个平台，其他平台即使能跑起来也不在官方支持范围内。

### 安卓上能跑吗？

官方未支持，但原文给了变通做法：把 Assets/Plugins/RoslynCSharp/Runtime 拷到 Assets 下并补齐依赖项。

### 加载外部代码怎么保证安全？

可以设置安全限制，禁止使用指定的命名空间和类型；校验不通过会生成报告，指出非法类型在外部代码里的使用位置。

### 运行时编译的脚本会不会很慢？

原文称脚本编译完成后执行速度与游戏自身脚本一致，运行时编译不影响运行性能。

### 能用来做什么？

给项目加模组支持，或者做游戏内编程；包内还带一个用写代码帮老鼠走出迷宫的小游戏作示例。

### 导入的第三方代码有跟踪手段吗？

有，代码安全校验失败时会列出每个非法使用的具体位置，便于定位是哪段外部代码出的问题。
