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 GizmoKaracho · Aug 30, 2017 at 08:12 AM · scripting problemscriptableobjectmonobehaviourarchitecture

Adventure interactionSystem Structure (ScriptableObject,MonoBehavior,POO?)

Hi, I'm working on an 2d P&C Adventure and I want to design my Player-Interactions. I'm kind of stuck and could use some guidance. So far, I've got Characters (e.g. Player) and Interactable Objects, Interaction is driven by a MouseController and handled by an EventManager.

  1. User clicks on Interactable (GameObject,MonoBehavior)

  2. MouseController calls OnUse(player,interactionType) // type = USE,LOOK,KICK,PICKUP etc.

  3. Interactable notifies EventManager

  4. All subscribers do their thing (Update GUI, play sound, whatever)

Now what I want is a System for Interactable, that decides what to do OnUse

My Idea:

Every Interactable has a Set of Reactions that are bound to Conditions, when Conditions are met, the Reactions are executed.

Conditions could be "Has Inventory Item X", "Has Quest Stage X","Some global Bool is true" etc.

Reactions could be "Display Message X","Add InventoryItem X to Interactor","Set some bool" etc.

I would like to design the Interactable Conditions and Reactions in the Editor (or in external text file) and avoid making 100 Scripts that inherit Interactable and each implement OnUse. (The possible Interactions would be designed by a non-programmer in Unity Editor if I can get it to work somehow..)

How would you implement such an Interactable-Script and the components?

Examples/Current ideas:

 public enum InteractionType{LOOK,USE,KICK,TALK}
 
 public class Interactable : MonoBehaviour{
   Reaction[] condReactions;
   Reaction defaultReaction;
   
   public void OnUse(Character c, InteractionType type){
      foreach (Reaction r in condReactions){
         if (r.AllConditionsMet()) r.execute();
      }
      //...  if nothing matches
      defaultReaction.execute();
   }
 }

 public class Reaction : ? {
   public Condition[] conditions;
   // needs some more dynamic params like interactor,interactable etc.
   public bool AllConsitionsMet(){ //return true if all are met}
   
   public void execute(){
     // Add something to inventory
     // Display some text
     // destroy Interactable
     // ....
   }
   
 }
 public class Condition : ? {
     string condName;
     SomeClass value;  // SubClass for BoolConditions,HasInventoryConditions etc ?
 
    public bool IsMet(){
     // some evaluation ?
   }
 }


Could anybody shed some light and give me some guidance?

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

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

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

The script I copied from the Summer 2020 Week 1 Tutorial, not working for me... 0 Answers

Scripting Movement Fails for Instantiated Prefab 2 Answers

If statement not working. 0 Answers

Objects destroy when collide with each other 0 Answers

Having Trouble Disabling Script Components. 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