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
797 141 107 122

(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.4k 20 28 118

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:

x10243
x513
x65
x2

asked: Nov 28, 2011 at 03:45 AM

Seen: 2718 times

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