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 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.

avatar image FurretTurret hexagonius · Mar 12, 2016 at 06:53 PM 0
Share

Ah, to clarify, the Updater classes are indeed each in their own file with the appropriate name.

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Addcompont and Change It's Value After Delete another Same Parent type inheritanced Component ,Addcomponent after DeleteAnother Same MotherType Component And Change It's Value 1 Answer

Problem with throwable script in sphere 0 Answers

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

inheritance - using base class member variables 2 Answers

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