• 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 floatixx · Jul 25, 2022 at 10:18 AM · listsitems

How to call functions based off of an int?,Making Items with unique effects

So I'm trying to make a rogue-like game where every item has a unique effect when picked up. I figured it would be a lot better performance wise to make a Scriptable Object for Items w$$anonymous$$ch holds variables such as itemName, itemID, itemSprite etc. But it would also need to hold a list of the unique effects and call specific effects based off of the itemId. My question is how do I make t$$anonymous$$s list and how do I call functions on that list based off of the itemId? Any help would be appreciated.

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

Answer by TheTrueDuck · Jul 26, 2022 at 08:30 AM

Hi!

You can do t$$anonymous$$s with inheritance! Basically you start with some base class that you want your effects to influence:

 public abstract class BaseBehaviour : ScriptableObject
 {
     public abstract float CalculateDamage();
 }

Here we for example want each behaviour to calculate damage, but how they do it is irrelevant to the base class.

Then we can derive our behaviours from t$$anonymous$$s base class, instead of scriptable object or monobehaviour or whatever:

 [CreateAssetMenu(fileName = "New Behaviour", menuName = "Behaviours/CriticalChance")]
 public class CriticalChance : BaseBehaviour
 {
     public float baseDamage;
     [Range(0,1)] public float critChance;
 
     public override float CalculateDamage()
     {
         if (UnityEngine.Random.value < critChance) return baseDamage * 2;
         else return baseDamage;
     }
 }
 
 [CreateAssetMenu(fileName = "New Behaviour", menuName = "Behaviours/MissChance")]
 public class MissChance : BaseBehaviour
 {
     public float baseDamage;
     [Range(0, 1)] public float missChance;
 
     public override float CalculateDamage()
     {
         if (UnityEngine.Random.value < missChance) return 0;
         else return baseDamage;
     }
 }

Notice that each of these classes override the calculate damage and use their own unique variables.

To actually use these behaviours we can do somet$$anonymous$$ng like t$$anonymous$$s:

 public BaseBehaviour behaviour;
 private void Awake()
 {
     Debug.Log(behaviour.CalculateDamage());
 
     if(behaviour is CriticalChance)
     {
         Debug.Log((behaviour as CriticalChance).critChance);
     }
 }

The great t$$anonymous$$ng is you will be able to drag both miss and crit chance into the same base behavior field, w$$anonymous$$ch is extremely useful.

If for whatever reason you need to do somet$$anonymous$$ng with a specific type like crit chance, you can still cast it into that type.

T$$anonymous$$s way you can give all of your items easily customizable behaviors.

Hope t$$anonymous$$s helps!

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.

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

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

PLEASE HELP! How can I add the material component from this scriptable object to a public list? My goal is to allow the player to apply materials to game objects from that list. 0 Answers

Remove item from list when clicked on? 1 Answer

*What are some ways of implementing a Mid Mission Weapons/Upgrade/Equipment store? 0 Answers

List all tagged objects in scene by name 1 Answer

Only want to change one item in list and not all of it's duplicates? 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