Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 /
avatar image
0
Question by AlwaysSunny · Sep 25, 2014 at 01:23 PM · instanceeventssingletonpersistencehideflags

OnDisable calls singleton instance, creates unwanted object + errors

So I'm just having one of those mornings, not quite grasping the best way around this.

My singleton instance invokes events to which other things subscribe. Subscribers subscribe to those events through the singleton's instance.

When I exit play mode, my subscribers call their OnDisable methods to unsubscribe, but evidently the singleton instance has already been destroyed by this point, so a new instance is created.

I figured I'd just add a DontSave hideflag to the singleton instance when it is lazy-created, but the object persists once play mode has been exited. Therefor I end up with errors immediately (before playmode has fully exited) because of null references, and must delete the unwanted instance from the scene.

I know there's gotta be a clever way I can still use this design pattern, but I'm not caffeinated enough to see it. Any suggestions would be great!

ps: my singletons are monobehaviors to conveniently expose them to the inspector

Comment
Add comment · Show 2
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
avatar image MrGuardianX · Sep 25, 2014 at 01:52 PM 0
Share

Why can't you just check whether this singleton is null in OnDisable method of the subscriber when trying to unsubscribe to avoid such errors?

avatar image AlwaysSunny · Sep 25, 2014 at 02:17 PM 0
Share

Thanks for the input, detailed comment on @Harshad$$anonymous$$ 's answer. :)

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by HarshadK · Sep 25, 2014 at 01:44 PM

Without code it is just hard to provide proper solution but you can check from your subscribers if your singleton is present or not and if it is not present then it does not need to call the unsubscribe itself since it is just gonna be useless.

Comment
Add comment · Show 1 · Share
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
avatar image AlwaysSunny · Sep 25, 2014 at 02:17 PM 1
Share

Thanks for posting! $$anonymous$$y singleton classes derive from a base which automatically creates an instance if none is found in the scene. (So even checking for null will create the object and return a reference.)

For the time being I've got a second type which eschews this behavior. I'm doing as you suggest and that works out fine. Just feels messier, I guess.

I was mostly curious to learn how to avoid this problem without ditching the original lazy-instantiated singleton code.

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

26 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

Related Questions

'Awake' not called first after scripts are recompiled during execution 1 Answer

Avoid NullReferenceException with Singleton 3 Answers

What happens with the receiver when the same event is trigger from multiple instances at the same time? 0 Answers

Is it costly to get a singleton instance each frame ? 1 Answer

How do I stop a singleton from trying to load itself again when I change scenes? 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