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 Arteminio777 · Dec 12, 2019 at 11:18 PM · c#collections

Dictionary suddenly loses its items

I have a dictionary containing several items, which are never removed through code. However, at random times, dictionary loses all its items.

I am very puzzled what could be causing this.

Edit: based on feedback from comments.

1) Action is not Monobehaviour. Does that make a difference?

2) When items are lost, all items are lost, i.e. dictionary is empty, but not null.

3) The issue occurs randomly, that is, not every game run, not at exact same time, not after a specific action.

4) Actions should not destroy themselves by their code. They are just classes that do math and move gameobjects.

5) Before the issue, actions perform as intended, i.e. are called by BehaviouSystem by key and do respective calculations and actions.

6) The NoneAction is just an inmplementation of the interface, with all functions being empty, that means logic should not be removing anything from the dictionary for sure.

Dictionary [ActionDictionary] is not referenced anywhere else, except for this class:

 using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public enum Action
 {
     Eat,
     None,
 }
 
 public class BehaviourSystem : MonoBehaviour
 {
     private float reactionPeriod;
     private float timeWithoutReaction;
     private Action CurrentStrategy = Action.None;
 
     private Dictionary<Action, IAction> ActionDictionary = new Dictionary<Action, IAction>();
 
     void Awake()
     {
         InitStats();
         InitActions();
     }
 
     #region Initialization
     void InitStats()
     {
         reactionPeriod = 1.0F;
         timeWithoutReaction = 0.0F;
     }
 
     void InitActions()
     {
         ActionDictionary.Add(Action.None, new NoneAction());
 
         List<List<ObjectTag>> edibleTagCombinations = new List<List<ObjectTag>>()
         {
             new List<ObjectTag>(){ ObjectTag.Edible, ObjectTag.Small, ObjectTag.Plant }
         };
         ActionDictionary.Add(Action.Eat, new EatAction(gameObject.transform, edibleTagCombinations));
     }
     #endregion
 
     void Update()
     {
         timeWithoutReaction += Time.deltaTime;
         if(timeWithoutReaction > reactionPeriod)
         {
             timeWithoutReaction -= reactionPeriod;
             CurrentStrategy = GetBestAction();
             ActionDictionary[CurrentStrategy].MakeDecision();
         }
     }
 
     private void FixedUpdate()
     {
         ActionDictionary[CurrentStrategy].PerformAction();
     }
 
     private Action GetBestAction()
     {
         Action bestAction = Action.None;
         float bestActionScore = float.MinValue;
         foreach (var potentialAction in ActionDictionary)
         {
             float actionScore = potentialAction.Value.GetActionPriorityScore();
             if (actionScore > bestActionScore)
             {
                 bestActionScore = actionScore;
                 bestAction = potentialAction.Key;
             }
         }
 
         return bestAction;
     }
 }
 
Comment
Add comment · Show 4
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 TreyH · Dec 12, 2019 at 11:27 PM 1
Share

This isn't relevant, but do be careful with creating an enum called Action while still importing System directly. System.Action is a delegate type for methods without parameters or return values and your Action enum type being declared in the global namespace might give you some weird behavior to anything using the System namespace's version of Action as something like a coroutine callback, for example.

avatar image Bunny83 TreyH · Dec 12, 2019 at 11:54 PM 1
Share

Right, the Action name collision would be my first concern. Though as long as it's defined in the global namespace it will always shadow the types defined in actual namespaces. The compiler will only complain if you have two types in equal priority namespaces since it can't tell which you want to use. Generally: global > otherNamespace.


However what confuses me a bit is that he said he has "several" items in the dictionary. However with that enum as key there can at max only be exactly 2 items: "None" or "Eat". Of course maybe he want's to add more in the future, however I don't really get the issues here. Which "item" is lost here? If there are only two in the dictionary and you loose one you would only have one left. Though the item "None" seems like a "null" / not used replacement. So effectively you only have one useable item at the moment. This question needs some serious clarifications on the actual issue.


The GetBestAction method iterates through all items (so the two items there are) and use the method GetActionPriorityScore from the interface IAction. We have no idea what value the "NoneAction" class and the "EatAction" class will return

avatar image Larry-Dietz · Dec 12, 2019 at 11:53 PM 0
Share

I don't see anything obviously wrong with this code. Is the problem purely random? Or can you cause it to happen through a certain set of circumstances? i.e. Every time the Eat action is performed, the dictionary goes empty?

avatar image oTaijjo · Dec 13, 2019 at 08:00 AM 0
Share

$$anonymous$$y first guess would be, that your Actions destroy themselves when they perform (i.e. remove themselves)? Does that make sense?

1 Reply

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

Answer by Arteminio777 · Dec 18, 2019 at 11:00 AM

After testing around, it appears that the dictionary becomes empty, if during runtime I make changes to any source file and save it.

Is this an expected behaviour?

EDIT: Comment confirms that it is indeed an issue, which can cause a dictionary to go empty.

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 Larry-Dietz · Dec 18, 2019 at 02:01 PM 0
Share

Yes, this is expected. When you make any script changes, you should restart the run of the game, otherwise this, and other issues will occur. I changed my setting to automatically exit the run when a script change is detected, to stop this kind of confusion :)

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

682 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

NativeList Empty Outside Job But Not Inside It 1 Answer

How to create a generic list from a group of gameObjects with specific tag? 1 Answer

Visual Studio is not recognizing Unity 5 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