x


Syntax for EditorApplication.playmodeStateChanged

I would like to build an editor helper which sets my game to it's first scene when I click play, regardless of which scene was open in the editor.

I thus need to detect when the editor's playmode state changes, but the syntax for registering an editor delegate in C# currently has me stumped.

Many thanks to anyone who can provide sample code for playmodeStateChanged!

This code:

using UnityEngine;
using UnityEditor;
using System.Collections;

public class EditorHelper : EditorWindow {
    void playmodeStateChanged () {
        Debug.Log("State Changed!");
    }
}

results in this error:

ArgumentException: CompareBaseObjects  can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.
UnityEngine.Object.op_Implicit (UnityEngine.Object exists)
more ▼

asked Nov 28, 2011 at 03:45 AM

Aubrey Falconer gravatar image

Aubrey Falconer
782 140 105 118

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

As far as I can tell, what you do here is this-

using UnityEngine;
using UnityEditor;
using System.Collections;

public class EditorHelper : EditorWindow {

    public void Awake() {
        EditorApplication.playmodeStateChanged += PlaymodeCallback;
    }
    public void PlaymodeCallback () {
       Debug.Log("State Changed!");
    }
}

Also, I think you might be mistaken as to what is causing that error- that is usually caused when you try to use a constructor or something with a MonoBehaviour or other special Unity class!

more ▼

answered Nov 28, 2011 at 04:17 AM

syclamoth gravatar image

syclamoth
18.3k 19 26 107

Thanks for your clarification! This makes more sense. I realized that I was grossly overthinking my original problem and didn't need anything other than checking if time was 0 in Awake, but I am sure I and others will have uses for editor delegates in the future.

Nov 28, 2011 at 06:42 AM Aubrey Falconer

Shouldn't it be

EditorApplication.playmodeStateChanged += PlaymodeCallback;

I don't think just using = works, I think you need to use +=.

Apr 28, 2012 at 04:27 AM Excrubulent
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x9075
x466
x60
x2

asked: Nov 28, 2011 at 03:45 AM

Seen: 2491 times

Last Updated: Apr 28, 2012 at 05:50 AM