• 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
1
Question by Bazzalisk · Jul 09, 2016 at 02:50 PM · instances

How to create a

Hey guys, i'm struggling a little bit with creating new instances my problem is pretty simple, in my code im importing an instance of an object, this object inherits from AbilityEffect, however the object itself is a seperate class that inherits from AbilityEffect(Just reiterating), what i want to do is create a new instance of the imported object of the same class, I want to beable to pass information into the constructor... I pretty much just want to beable to choose type based on imported type!

 public class EffectHandler : MonoBehaviour {
     
     private AbilityEffect abilityEffect;

     //let inAbilityEffect be effect1 which inherits AbilityEffect for example.
     public void performEffect(AbilityEffect inAbilityEffect) 
     {
         abilityEffect = new (inAbilityEffect.getType())(//Classconstructor);
         abilityEffect.performBehaviour();
     }
 }

Hopefully this isn't too vague, i found this hard to put into words hence why i couldn't find this in the search bar.

Thanks for your time, Bazzalisk.

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

1 Reply

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

Answer by Malleck666 · Jul 09, 2016 at 08:03 PM

How about...

 Type t = Type.GetType(inAbilityEffect);
 
 Object abilityEffect = Activator.CreateInstance(t);

Then invoke the members as required.

Comment
Add comment · Show 5 · 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 Bunny83 · Jul 09, 2016 at 10:29 PM 0
Share

Your probably mean

 Type t = inAbilityEffect.GetType();
 abilityEffect = (AbilityEffect)Activator.CreateInstance(t);
avatar image Bazzalisk Bunny83 · Jul 10, 2016 at 12:23 PM 0
Share

this worked! thank you very much.

avatar image Malleck666 Bunny83 · Jul 10, 2016 at 12:34 PM 0
Share

Yours is probably a little more elegant than $$anonymous$$e Bunny83, but both work all the same!

avatar image Bazzalisk · Jul 10, 2016 at 12:16 AM 0
Share

Thanks Bunny and $$anonymous$$alleck, this seems to have worked but how do i call the constructor of the script? it seems to be calling the default constructor script?

avatar image Bunny83 Bazzalisk · Jul 10, 2016 at 02:03 AM 1
Share

Just check the $$anonymous$$SDN docs about the Activator class. Createinstance has multiple overloads and this one takes an additional array of parameters. The Activator class is part of the reflection system to allow dynamic access to class constructors. Since you don't know the type at compile time you can't simply call the constructor since the compiler doesn't know which constructor it has to call.

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

47 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

Related Questions

Custom Team Colour Materials 0 Answers

Does GetInstanceID ever change on an object? 2 Answers

How to modify a variable on some instances of a prefab in an array of instances? 1 Answer

Performance impact of keeping all instances of a game in a single script 1 Answer

how to save instance of class trough editor 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