Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by Aweyeahs · May 11, 2017 at 10:58 PM · editorinspectoreditor-scriptingcustom-inspectorcustom inspector

Custom Inspector Script Resetting Information

I created a Custom Editor for a GunObject class which should allow you to select a MonoScript (which is a class that derives from FireBehaviour) and then create an instance of that class which is stored in the GunObject.

It works perfectly fine until I press the Play button or select a different target for the Inspector, which causes the information displayed in the Inspector is reset.

Here is the Editor Script:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEditor;
 
 [CustomEditor(typeof(GunObject))]
 public class WeaponScriptEditor : Editor {
     private SerializedProperty behaviour;
     private MonoScript behaviourScript;
 
     public void OnEnable() {
         behaviour = serializedObject.FindProperty("behaviour");
     }
 
     public override void OnInspectorGUI() {
         serializedObject.Update ();
 
         FireBehaviour b=null;
     
         behaviourScript = (MonoScript)EditorGUILayout.ObjectField ("Fire Behaviour", behaviourScript, typeof(MonoScript), false);
 
         if (behaviourScript != null && behaviourScript.GetClass ().IsSubclassOf (typeof(FireBehaviour))) {
             b = (FireBehaviour)ScriptableObject.CreateInstance (behaviourScript.GetClass ());
             Editor editor = Editor.CreateEditor (b);
 
             EditorGUILayout.LabelField ("Fire Behaviour Editor:");
 
             editor.OnInspectorGUI ();
 
             AssetDatabase.AddObjectToAsset (b, target);
             behaviour.objectReferenceValue = b;
 
         } else {
             EditorGUILayout.LabelField ("Script must derive from FireBehaviour!");
         }
 
         serializedObject.ApplyModifiedProperties();
     }
 }

Here is the GunObject Class:

 using UnityEngine;
 using UnityEngine.Events;
 using System.Collections;
 using UnityEditor;
 
 [CreateAssetMenu()]
 public class GunObject : ScriptableObject {
 
     public FireBehaviour behaviour;
 
 
     public void Act() {
         if (Input.GetButton ("Primary Fire")) {
             behaviour.PrimFire ();
         }
         if (Input.GetButton ("Alt Fire")) {
             behaviour.AltFire ();
         }
         if (Input.GetButton ("Reload")) {
             behaviour.Reload ();
         }
     }
 }
 

Here is the FireBehaviour Class:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class FireBehaviour : ScriptableObject {
 
     public virtual void PrimFire () {}
     public virtual void AltFire () {}
     public virtual void Reload () {}
 
 }

I've tried a few different things including AssetDatabase.SaveAssets among others, but nothing I find online seems to work.

Also, AssetDatabase.AddObjectToAsset keeps adding new instances to the asset every time OnInspectorGUI is called, so I was wondering if there was a better way to go about that.

Thanks for any help! I could really use some.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

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

Answers Answers and Comments

121 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Unity Editor - Group Public GameObjects 0 Answers

Editor Scripts running slow 0 Answers

How to create item database? 0 Answers

PolygonCollider2D / Custom Inspector: "Edit Collider"-Button disappears when adding custom editor buttons. 2 Answers

Custom Editor List with child classes 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges