//Remember, you can't compile MonoBehaviours with CSSCriptEngineRemote, stick to //plain C# classes for safety void RemoteCompileType() { CSScriptEngineRemote engineRemote = new CSScriptEngineRemote(); engineRemote.LoadDomain();//Important! engineRemote.AddUsings("using UnityEngine;"); string typeCode = @" public class SimpleType { public void PrintHey() { Debug.Log(""Hey!""); } } "; engineRemote.CompileType("SimpleType", typeCode); engineRemote.CompileCode(@" SimpleType sm = new SimpleType();sm.PrintHey(); "); engineRemote.ExecuteLastCompiledCode(); engineRemote.UnloadDomain();//Important! }
void OnDisable() { _engine.RemoveOnCompilationFailedHandler(OnCompilationFailedAction); _engine.RemoveOnCompilationSucceededHandler(OnCompilationSucceededAction); _engine.UnloadDomain(); }
void Update() { if (Remote) { if (_engineRemote.RemoteDomain == null) { _engineRemote.LoadDomain("RemoteDomain"); _engineRemote.AddUsings("using WhitelistAPI;"); _engineRemote.AddUsings("using UnityEngine;"); _engineRemote.AddUsings("using System;"); } if (!GameObjectWatcher.Initialized) { GameObjectWatcher.Initialize(); } } else if (_engineRemote.RemoteDomain != null) { GameObjectWatcher.DestroyAllDynamicGOs(); if (!ResetSceneOnExecute) { GameObjectWatcher.Disable(); } _engineRemote.UnloadDomain(); } if (ResetSceneOnExecute) { if (!GameObjectWatcher.Initialized) { GameObjectWatcher.Initialize(); } } else { if (GameObjectWatcher.Initialized) { GameObjectWatcher.Disable(); } } }