はじめに
「UniScript」を Unity プロジェクトに導入することで
C# のコードをインタープリタ方式で実行できるようになります
使用例1
using Slowsharp; using UnityEngine; public class Example : MonoBehaviour { private void Start() { // C# のコードの定義(Foo クラスの定義) var runner = CScript.CreateRunner ( @" public class Foo { public int Sum( int x, int y ) => x + y; } " ); // Foo クラスのインスタンスを作成 var foo = runner.Instantiate( "Foo" ); // Foo クラスの Sum 関数を呼び出して値を受け取る var num = foo.Invoke( "Sum", 1, 2 ); Debug.Log( num.As<int>() ); } }
C# のシンプルなクラスは上記のようなコードで実行できます
使用例2
using Slowsharp; using UnityEngine; public class Example : MonoBehaviour { private CScript m_runner; private void Start() { m_runner = CScript.CreateRunner ( @" public class Foo { public int Sum( int x, int y ) => x + y; } " ); } private void Update() { if ( Input.GetKeyDown( ( KeyCode.Space ) ) ) { m_runner.UpdateMethodsOnly ( @" public class Foo { public int Sum( int x, int y ) => x * y; } " ); } var foo = m_runner.Instantiate( "Foo" ); var num = foo.Invoke( "Sum", 1, 2 ); Debug.Log( num.As<int>() ); } }
UpdateMethodsOnly 関数を使用することでホットリロードすることもできます
使用例3
using UnityEngine; public class Example : UniScriptBehaviour { public Transform m_target; private void Awake() { // Example クラスに DemoScript クラスをバインドして // Update 関数が呼び出されるようにする Bind ( @" using UnityEngine; class DemoScript : Example2 { private void Update() { m_target.position += new Vector3( 0, 0, 1 ); } }" ); } }
MonoBehaviour を継承したクラスをインタープリタ方式で実行することもできます