• 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 FurretTurret · Mar 12, 2016 at 02:45 AM · gameobjectinheritanceaddcomponent

Child of child of MonoBehaviour isn't a MonoBehaviour?

I've found a way around this problem, but it's a curious issue that I'd still like to know the answer to.

I'm authoring unit tests for a non-MonoBehaviour class that uses a singleton MonoBehaviour, Updater, that I've written to send Update events to non-MonoBehaviours that need them. I have one such class that registers for these events in its constructor, so that callers don't need to worry about registering it.

For unit tests, though, I'm triggering these Update events manually, so I only need an UpdaterDummy, a child of Updater that hides the actual behavior. In test setup, I need to set my singleton, as:

 public class Updater : MonoBehaviour {
     protected static Updater Instance; // With getters, etc.
 [...] // Has an Initialize method to set the Instance.
 }
 public class UpdaterDummy : Updater {
 [...] // Hides Initialize with a new implementation to set the Instance to a dummy.
 }

 [TestFixtureSetUp]
 public void Setup() {
     UnityEngine.GameObject gameObject = new UnityEngine.GameObject("test");
     unitTest.UpdaterDummy updater = gameObject.AddComponent<unitTest.UpdaterDummy>();
     updater.Initialize(); // Sets the singleton instance.
 }

Edit: The Updater and UpdaterDummy are in their own files with the appropriate names.

However, this fails with Unity's The script needs to derive from MonoBehaviour! error at AddComponent, despite the fact that UpdaterDummy is an Updater, which is a MonoBehaviour. Curiously, if I replace that with:

     unitTest.UpdaterDummy updater = new unitTest.UpdaterDummy();

then I get the You are trying to create a MonoBehaviour using the 'new' keyword error at runtime, but the code runs as expected.

So Unity knows that this is a MonoBehaviour, but AddComponent returns null because it's not a MonoBehaviour? I've tried various combinations of hiding and overriding members in UpdaterDummy, but even when UpdaterDummy inherits Updater verbatim, I still hit these errors. I'm assuming this is some issue with inheritance with children of MonoBehaviours, but I guess that's why I'm asking! Thanks.

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 hexagonius · Mar 12, 2016 at 04:34 PM 0
Share

$$anonymous$$y guess here is Unity does not allow $$anonymous$$onoBehaviours to be added as components if their file name is different. place em into separate classes and I bet it works. The inspector needs to know what to show here.

Show more comments

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

how do I add link script to gameobject that already exist with attached script 1 Answer

inheritance - using base class member variables 2 Answers

C# - creating a list of classes 5 Answers

How to copy script to another GameObject 1 Answer

Grab an inherited subclass script from a GameObject in C# 0 Answers


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