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 mats1105 · Mar 10, 2019 at 12:14 AM · eventsactions

Removing method from OnRightClickEvent

Hi,

I am making an inventory system for a 2D game. I have some functionality that runs a method when right-clicking on an "item slot".


However, sometimes I want something else to happen when right-clicking. In this case, I want to transfer items to a chest when the chest is open.


In my ItemSlot script, I listen for OnPointerClick() and check if it was a right-click:

 public event Action<ItemSlot> OnRightClickEvent;
 
 public void OnPointerClick(PointerEventData eventData)
 {
     if (eventData != null && eventData.button == PointerEventData.InputButton.Right)
     {
         if (OnRightClickEvent != null)
         {
             OnRightClickEvent(this);
         }
     }
 }

In my ItemContainer (inventory) script, I set it up:

 public event Action<ItemSlot> OnRightClickEvent;
 
 protected virtual void Awake()
 {
     for (int i = 0; i < itemSlots.Count; i++)
     {
         itemSlots[i].OnRightClickEvent += slot => OnRightClickEvent(slot);
     }
 }

And in my InventoryManager, I assign a method that runs every time I click on an "item slot" in the inventory:

 private void Awake()
 {
     inventory.OnRightClickEvent += InventoryRightClick;    
 }
 private void InventoryRightClick(ItemSlot itemSlot)
 {
      //do something
 }

Also in the same script, I sometimes run this code to switch the method I am running when a right-click occurs:

 public void OpenItemContainer(ItemContainer itemContainer)
 {
     inventory.OnRightClickEvent -= InventoryRightClick;
     inventory.OnRightClickEvent += TransferToItemContainer;
 }
 
 private void TransferToItemContainer(ItemSlot itemSlot)
 {
     //do something else
 }



The problem is that this last part doesn't work. When I run the OpenItemContainer() method, and then proceed with right-clicking on an "item slot", I just end up running both methods.


In other words, this doesn't work:

 inventory.OnRightClickEvent -= InventoryRightClick;


Does anyone know why? Thanks, in advance!

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

102 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

Related Questions

Adding UnityAction to UnityEvent from code 1 Answer

I want the gameobject field of my persistent listeners to reference an object other than the one they are on. Is this possible? 1 Answer

How to handle multiples instances of an object raising the same event? 0 Answers

Subscribers of Delegates? 2 Answers

Generic class for Events and Event Listeners 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