- Home /
Ask for Script Compilation from EditorWindow Button
Hi,
I am trying to write a editor script that write another script attached to a game object. There is a simple reduction of what I do below this message. Everything work fine : script is compiled and works fine once I run the game. My problem is that compilation seems to be triggered only when I switch back and forth between Unity and MonoDevelop. Is there a way to trigger compilation from the editor window ? Incidentally is there a way to tell the user that compilation is done ?
Thanks a lot,
-jujule
using System;
using System.IO;
using UnityEditor;
using UnityEngine;
public class MyWindow : EditorWindow {
string projectPath;
string scriptsPath;
string operation = "2+2";
// Add menu item named "My Window" to the Window menu
[MenuItem("Window/My Window")]
public static void ShowWindow() {
//Show existing window instance. If one doesn't exist, make one.
EditorWindow.GetWindow(typeof(MyWindow));
}
void OnGUI() {
GUILayout.Label ("Compile Script", EditorStyles.boldLabel);
if ( GUILayout.Button ("Write File") == true ) {
projectPath = Directory.GetCurrentDirectory();
scriptsPath = projectPath + "/Assets/Scripts";
string filePath = scriptsPath + "/Operation.cs";
StreamWriter streamWriter = new StreamWriter( filePath );
if ( System.IO.File.Exists( filePath ) == true ) {
streamWriter.Write ( "using UnityEngine;\nusing System.Collections;\npublic class Operation : MonoBehaviour {\nvoid Awake() { Debug.Log ( " + operation + " );\n}\n}\n" );
streamWriter.Close ();
}
try {
}
catch ( System.IO.IOException e ) {
Debug.Log ( e.Message + "\nThere was an error writing file);
}
}
operation = EditorGUILayout.TextField ("Operation : ", operation );
this.Repaint ();
}
}
I found that adding AssetDatabase.Refresh(); at the end of OnGUI() would trigger compilation and solve my problem.
The following thread has tons of answers on how to get notified that compilation is done : http://answers.unity3d.com/questions/14367/how-can-i-wait-for-unity-to-recompile-during-the-e.html?page=1&pageSize=5&sort=votes
Answer by jujule · Jul 18, 2012 at 07:39 AM
I found that adding
AssetDatabase.Refresh();
at the end of OnGUI() resulted in exactly what I wanted.
jujule
Your answer
Follow this Question
Related Questions
Create a custom editor window with repeating subsection (mockup included) 0 Answers
Game window size from editor window in editor mode 1 Answer
Assigning class instance to a Gameobject 0 Answers
Draw inspector for SerializedObject within EditorWindow? 1 Answer
Multiple editor windows combined 0 Answers