• 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 soft_sound · May 15, 2014 at 07:20 AM · c#objectscasting

Unity accessing members of an object

How do I access the members of an object, not a gameobject, but an object created from a different class?

I would like to pass in an object and then call a function from it or access it's public variables.

I can find the type of the object, check if the type matches a set type and then cast the object to that type to then call functions from it but I was hoping to find a more generic way of doing this.

I was just hoping to have a catch all sort of object, cast it to the right type (it's own type) and then call members from the object but I haven't figured out any sort of smooth way to do this. I'm trying to avoid using a switch statement for all the different types the object can be, and just cast the object to what it is or pretty much what getType says the type should be.

Pretty much I want to avoid this:

pigClass w = EnemyObj as pigClass;

and want to do something like this:

var v = EnemyObj.GetType(); x = EnemyObj as v;

This is what I have script wise...

 public object EnemyObj;
 public allEnemiesC getEclass;
 
 ....
 
     getEclass = this.GetComponent("allEnemiesC") as allEnemiesC;
         
         EnemyObj = getEclass.SelectedObj(type);
         
         if (EnemyObj.GetType() == typeof(pigClass)) //--- works
         {
             Debug.Log("Works");
             pigClass w = EnemyObj as pigClass; //must cast to access members
             Debug.Log (w.eName);
         
         }
         else
         {
             Debug.Log("not working!");
         }

And I've sorta looked at generics, and invoke methods and was kind of hoping there was an easier way to do this.

Also why do I need to recast this again if (EnemyObj.GetType() == typeof(pigClass)) is true?

It feels like pigClass w = EnemyObj as pigClass; is redundant,

but EnemyObj is just a Object that has the pigClass object passed to it...

It returns an error if I skip casting of course, object does not have a definition blah blah...

So, my question is how can I cast to what the object is from getType?

var v = EnemyObj.GetType();

x = EnemyObj as v;

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
0
Best Answer

Answer by fafase · May 15, 2014 at 07:40 AM

Use an inheritance or interface:

 IMyObjectType{
    void Method();
 }
 
 public class MyObject:MonoBehaviour,IMyObjectType{
    public void MyMethod(){
       print("MyObject");
    }
 }
 public class MyOtherObject:MonoBehaviour,IMyObjectType{
    public void MyMethod(){
       print("MyOtherObject");
   }
 }
 
 public class Manager:MonoBehaviour{
    void Start(){
       IMyObjectType [] objs = (IMyObjectType[])FindObjectsOfType(typeof(IMyObjectType));
       foreach(IMyObjectType t in objs){
          t.Mymethod();
       }
    }
 }
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 soft_sound · May 30, 2014 at 12:15 AM 0
Share

Thank you, I'll start looking into this to see if it might work to solve my issue.

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

20 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

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Help in solving mistake in my code 1 Answer

Get the amout of objects in a given position 1 Answer

Casting to a Type using a String 2 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