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 /
avatar image
0
Question by eggorko · Aug 18, 2017 at 06:07 AM · inventoryinventory systemmethodspolymorphism

A way to implement "Use" of item in game. A way to serialize object with method from other script maybe?

So I'm making simple inventory system. My approach is this. I got class Item with bunch of fields. I store them in a list itemDatabase inside of ScriptableObject itemDatabaseAsset. I want to assign effects of items in the editor. One of my ideas was this

 [System.Serializable]  public class Item   {
      public string itemName;
      //some more variables
      public Effect itemEffect; // Custom class effect.
      //some more code
       public void Use(Entity x) // Method "Use" called from inventory
      {
          itemEffect.UseEffect(x);  // It calls virtual method "UseEffect" of "Effect" custom Class.
      }  
 }

Then i have all the effect classes i want dirived from "Effect" class and i just assing it in editor like

  Item_Database_Asset.Items_Database_List[1].itemEffect = new TestEffect(); // Item 1 from database had assing TestEffect with ovveriden UseEffect function.

This didn't work because apparently unity doesn't support polymorphism when serializing, which means after deserialization all me different effect becomes base Effect class they all derived from. However, if i do the same assigning TesetEffect to Item on runtime it works(duh). So i got 2 ideas is there a way to refer a method to an item in an editor, so on run time it's assigned itself by that refer. Or maybe just store a name on effect(string) and invoke it by name(GetMethod(string) or something i don't know. The latter seams a bit weird or it's ok? Thank you.

Comment
Add comment · Show 1
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 UltimateLogicGames · Aug 18, 2017 at 06:54 AM 0
Share

I'm making a game and going to make a simple inventory interface. You question scared me, is it necessary to mess with classes so much? :)

2 Replies

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

Answer by eggorko · Aug 18, 2017 at 10:14 AM

Well, i tried my second idea and it worked. I give item string EffectName in editor and on run-time just loop through all items in database list and do GetMethod(EffectName) stuff. It's also involves Delegate.CreateDelegate function which i just found out exist and it's awesome. I will write the whole shebang later here. But i'm also need some feedback. Is't it an overkill? There must be much pimplier way to do this.

Comment
Add comment · 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
0

Answer by Linus333 · Sep 03, 2017 at 08:11 AM

I have exactly the same question, could you pleas share your code if you have a sulution? @eggorko

Comment
Add comment · 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

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

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

Inventory AddItem help 1 Answer

Scriptableobject List and Instantiating objects from it 3 Answers

Inventory Drop Function Problem 1 Answer

What is a good component to use for a GUI inventory display? 1 Answer

How to optimize this script and add items imediately without grids 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