- Home /
Custom Editor Script Sets Scene as Dirty Regardless of Changes
So, our team has made a couple of custom editor scripts to try and make some of our tools more usable. They work for the most part, but we've found an interesting side-effect. As soon as there's a custom script for any object, the unity scene gets set to 'dirty', even when no changes have been made. The only way to avoid getting the save notification is to not click in the scene editor at all, and sometimes that doesn't even work.
The Undo dialog given is 'Change Selection', but with objects not using custom editors, this does not flag the scene as dirty. Is there a way to fix this behaviour? It's not necessarily breaking any scenes, but it's very irritating to get the save dialogue constantly.
I've included the simplest/shortest version of our editor scripts below.
#pragma strict
@CustomEditor (ConveyorController)
class ConveyorControllerEditor extends Editor {
function OnSceneGUI() {
Undo.SetSnapshotTarget(target, "Altered Conveyor");
var script:ConveyorController = target as ConveyorController;
var pointA:Vector3 = script.GetPointA();
var pointB:Vector3 = script.GetPointB();
script.transform.position = (pointA + pointB) / 2;
var A:Vector3 = Handles.PositionHandle(pointA, Quaternion.identity);
var B:Vector3 = Handles.PositionHandle(pointB, Quaternion.identity);
var swap:float = 0;
//A is always left of B (smaller val)
if(A.x > B.x)
A.x = B.x;
if (GUI.changed) {
EditorUtility.SetDirty(target);
script.SetPointA(A);
script.SetPointB(B);
}
if(Input.GetMouseButtonDown(0)) {
Undo.CreateSnapshot();
Undo.RegisterSnapshot();
}
}
}
Even knowing if this is default behaviour for custom editors in Unity would be nice, so I don't waste any more time trying to fix this.
Answer by ChaoticBoredom · Jan 15, 2013 at 07:41 PM
Solved this. The problem w/ this script in particular was line 12
script.transform.position = (pointA + pointB) /2;
Since OnSceneGUI is being called constantly, the object was constantly moving, even if it wasn't visible. This was the cause of the problems for many of the similar scripts we had. A simple if check usually solved the problem, since we only want code of this nature to be executed when necessary anyway. In this case, the offending line was moved down in the if (GUI.changed) block.
Your answer
Follow this Question
Related Questions
How could I merge 2 components' inspectors through a custom editor? 2 Answers
UnityEventBase editor changed callback 0 Answers
List of CustomEditor inside CustomEditor 1 Answer
Binary Serialization (In Editor) - Path Access denied / File not found 0 Answers
Field Attribute to auto insert in custom inspector 0 Answers