Skip to content

MiniPanda轻量级脚本语言

专为 Unity 设计,支持字节码编译、零 GC 分配、C# 双向互操作

特性一览

  • 字节码编译 - 编译后缓存,重复执行无编译开销
  • 零 GC 分配 - 大部分操作无内存分配,适合游戏热更新
  • 完整语法 - 变量、函数、Lambda、类、继承、模块、异常处理
  • C# 互操作 - 双向调用,无缝集成 Unity
  • 调试支持 - DAP 协议,VSCode 断点调试
  • 智能提示 - LSP 协议,代码补全、跳转定义

快速安装

在 Unity 项目的 Packages/manifest.json 中添加:

json
{
  "dependencies": {
    "com.azathrix.mini-panda": "https://github.com/Azathrix/MiniPanda.git"
  }
}

编辑器支持

推荐安装 MiniPanda VSCode 插件,提供:

  • 语法高亮
  • 代码补全
  • 跳转定义
  • 断点调试

快速示例

C# 端

csharp
using Azathrix.MiniPanda;

var vm = new MiniPanda();
vm.Start();

// 执行脚本
vm.Run(@"
    var name = ""MiniPanda""
    print(""Hello, {name}!"")
");

// 求值表达式
var result = vm.Eval("1 + 2 * 3");
Debug.Log(result.AsNumber());  // 7

// 注册 C# 函数供脚本调用
vm.SetGlobal("heal", NativeFunction.Create((Value amount) => {
    return Value.FromNumber(amount.AsNumber() * 2);
}));

vm.Shutdown();

脚本端

javascript
// 变量与字符串插值
var name = "MiniPanda"
print("Hello {name}!")

// 函数与 Lambda
func add(a, b = 0) return a + b
var double = (x) => x * 2

// 类与继承
class Entity {
    Entity(name) { this.name = name }
}
class Player : Entity {
    Player(name, level) {
        super.Entity(name)
        this.level = level
    }
}

// 模块
import "utils" as u
export func helper() { }

性能数据

Unity 6000.3 测试结果:

操作性能GC 分配
Eval 简单表达式1.1μs0
Run 编译+执行2μs0
函数调用3.1μs0
GetGlobal0.1μs0
SetGlobal<0.1μs0
循环 100000 次76ms0
递归 fib(20)30ms0

大部分操作 零 GC 分配,适合游戏热更新场景。

Released under the MIT License.