profelis / unity_roslyn

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

WARNING: this is just a PoC (Proof of Concept), not properly tested!

Unity runtime scripting using Roslyn compiler

just example how to use Roslyn scripting with Unity

  • Simpliest example
var result = await CSharpScript.EvaluateAsync<double>("System.Math.Pow(2,3)");
Debug.LogFormat("Math.Pow(2,3) = {0}", result);
Assert.AreEqual(result, 8);
  • Vector3 usage
var vec = await CSharpScript.EvaluateAsync<Vector3>(
    "new Vector3(1, 2, 3)",
    ScriptOptions.Default.WithImports("UnityEngine")
        .AddReferences(typeof(UnityEngine.Vector3).Assembly)
);
Debug.LogFormat("vector = {0}", vec);
  • Parameterize a script

NB: this sample works only with .Net Framework compatible level

var prevPos = Vector3.zero;
transform.position = prevPos;
await CSharpScript.EvaluateAsync<Vector3>(
    "transform.position = new Vector3(2, 2, 2)",
    ScriptOptions.Default.WithImports("UnityEngine")
        .AddReferences(typeof(UnityEngine.Vector3).Assembly),
    globals: new Globals {transform = transform}
);
var position = transform.position;
Debug.LogFormat("transform pos is {0} was {1}", position, prevPos);

Extra setup

  • Install required dlls into Assets/Plugins folder (read Assets/Plugins/readme.md for more info)

Useful links

About


Languages

Language:C# 100.0%