Search Unity

How can I find out which list is giving me "ArgumentOutOfRangeException"?

Discussion in 'Scripting' started by PHSenki, Oct 13, 2020.

  1. PHSenki

    PHSenki

    Joined:
    Feb 6, 2018
    Posts:
    13
    I can't figure out which of these links can take me to the list that is giving me this error


    ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: index
    System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <fb001e01371b4adca20013e0ac763896>:0)
    System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <fb001e01371b4adca20013e0ac763896>:0)
    DummyBehaviour.Refresh () (at Assets/DummyBehaviour.cs:245)
    DummyBehaviour.IndexAdd () (at Assets/DummyBehaviour.cs:324)
    DragToMoveDummies.WhenTransformed (System.Object sender, System.EventArgs e) (at Assets/DragToMoveDummies.cs:85)
    TouchScript.Utils.EventHandlerExtensions.InvokeHandleExceptions[T] (System.EventHandler`1[TEventArgs] handler, System.Object sender, T args) (at Assets/TouchScript/Scripts/Utils/EventHandlerExtensions.cs:29)
    UnityEngine.Debug:LogException(Exception)
    TouchScript.Utils.EventHandlerExtensions:InvokeHandleExceptions(EventHandler`1, Object, EventArgs) (at Assets/TouchScript/Scripts/Utils/EventHandlerExtensions.cs:33)
    TouchScript.Gestures.TransformGestures.Base.TransformGestureBase:onChanged() (at Assets/TouchScript/Scripts/Gestures/TransformGestures/Base/TransformGestureBase.cs:311)
    TouchScript.Gestures.Gesture:set_State(GestureState) (at Assets/TouchScript/Scripts/Gestures/Gesture.cs:286)
    TouchScript.Gestures.Gesture:setState(GestureState) (at Assets/TouchScript/Scripts/Gestures/Gesture.cs:919)
    TouchScript.Gestures.TransformGestures.Base.TwoPointTransformGestureBase:pointersUpdated(IList`1) (at Assets/TouchScript/Scripts/Gestures/TransformGestures/Base/TwoPointTransformGestureBase.cs:236)
    TouchScript.Gestures.TransformGestures.TransformGesture:pointersUpdated(IList`1) (at Assets/TouchScript/Scripts/Gestures/TransformGestures/TransformGesture.cs:208)
    TouchScript.Gestures.Gesture:INTERNAL_PointersUpdated(IList`1) (at Assets/TouchScript/Scripts/Gestures/Gesture.cs:762)
    TouchScript.Core.GestureManagerInstance:updateUpdated(IList`1) (at Assets/TouchScript/Scripts/Core/GestureManagerInstance.cs:395)
    TouchScript.Core.GestureManagerInstance:pointersUpdatedHandler(Object, PointerEventArgs) (at Assets/TouchScript/Scripts/Core/GestureManagerInstance.cs:670)
    TouchScript.Utils.EventHandlerExtensions:InvokeHandleExceptions(EventHandler`1, Object, PointerEventArgs) (at Assets/TouchScript/Scripts/Utils/EventHandlerExtensions.cs:29)
    TouchScript.Core.TouchManagerInstance:updateUpdated(List`1) (at Assets/TouchScript/Scripts/Core/TouchManagerInstance.cs:712)
    TouchScript.Core.TouchManagerInstance:updatePointers() (at Assets/TouchScript/Scripts/Core/TouchManagerInstance.cs:1001)
    TouchScript.Core.TouchManagerInstance:Update() (at Assets/TouchScript/Scripts/Core/TouchManagerInstance.cs:578)



    The issue comes from the stuff that is higher up?

    It must be something stupid that I'm missing out, but I can't find it! I'd appreciate help to figure it out =]
     

    Attached Files:

  2. Stevens-R-Miller

    Stevens-R-Miller

    Joined:
    Oct 20, 2017
    Posts:
    676
    Looks like Line 245 of DummyBehaviour, to me. Can you post the code?
     
  3. PHSenki

    PHSenki

    Joined:
    Feb 6, 2018
    Posts:
    13
    Hi there

    I'll paste the section of code that uses a list:


    Code (CSharp):
    1.  case "top":
    2.                 testerBody.SetActive(true);
    3.                 testerTop.SetActive(true);
    4.  
    5.                 Debug.Log("top list count = " + topObjects.Count + " top index = " + indexTop);
    6.  
    7.                 if (indexTop > topObjects.Count - 1) { indexTop = 0; }
    8.                 if (indexTop < 0) { indexTop = topObjects.Count - 1; }
    9.  
    10.                 switch (DataManager.Instance.language)
    11.                 {
    12.                     case "english":
    13.                         label.text = topObjects[indexTop].labelEnglish; break;
    14.                     case "portuguese":
    15.                         label.text = topObjects[indexTop].labelPortuguese; break;
    16.                     case "spanish":
    17.                         label.text = topObjects[indexTop].labelSpanish; break;
    18.                     default:
    19.                         label.text = topObjects[indexTop].labelEnglish; break;
    20.                 }
    21.                 if (!topObjects[indexTop].unlocked) { locked.SetActive(true); }
    22.                 testerTop.GetComponent<MeshFilter>().mesh = DataManager.Instance.topItem.mesh;
    23.                 testerTop.GetComponent<Renderer>().material = materialObjects[indexTop].material;
    24.                 testerTop.GetComponent<Renderer>().material.color = DataManager.Instance.topColor.color;
    25.                 testerBody.GetComponent<Renderer>().material = DataManager.Instance.bodyMaterial.material;
    26.                 testerBody.GetComponent<Renderer>().material.color = DataManager.Instance.bodyColor.color;
    27.                 break;
    I tried to use those conditions to avoid going out of reach, but I may have messed it up somewhere else
     
  4. PHSenki

    PHSenki

    Joined:
    Feb 6, 2018
    Posts:
    13
    Even tho indexTop is smaller than topObjects.Count it is still giving me this exception. The error also says the troublesome variable name is "index" but I haven't declared any variable as only "index"
     
  5. PHSenki

    PHSenki

    Joined:
    Feb 6, 2018
    Posts:
    13
    Here goes the whole thing, I hope it helps


    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.UI;
    5.  
    6. public class DummyBehaviour : MonoBehaviour
    7. {
    8.  
    9.     public int indexEyes = 0;
    10.     public int indexMaterial = 0;
    11.     public int indexTop = 0;
    12.     public int indexSide = 0;
    13.     public int indexFront = 0;
    14.     public int indexBot = 0;
    15.  
    16.     private PlayerDNA _playerDNA;
    17.  
    18.     public List<EyeObject> eyeObjects;
    19.     public List<MaterialObject> materialObjects;
    20.     public List<ColorObject> colorObjects;
    21.     public List<ItemObject> topObjects;
    22.     public List<ItemObject> sideObjects;
    23.     public List<ItemObject> frontObjects;
    24.     public List<ItemObject> botObjects;
    25.  
    26.     [Tooltip("eyes, material, top, side, front, bot")]
    27.     public string typeOfObject = "material";
    28.  
    29.     // Link References
    30.  
    31.     public GameObject dummyCamera;
    32.  
    33.     //Label
    34.     public Text label;
    35.     //Tester Preview
    36.     public GameObject testerBall;
    37.     public GameObject testerBody;
    38.     public GameObject testerTop;
    39.     public GameObject testerSide;
    40.     public GameObject testerFront;
    41.     public GameObject testerBot;
    42.     public GameObject testerEyes;
    43.  
    44.     public GameObject locked;
    45.  
    46.  
    47.  
    48.     private void OnEnable()
    49.     {
    50.         dummyCamera.SetActive(true);
    51.     }
    52.  
    53.     private void Awake()
    54.     {
    55.         _playerDNA = FindObjectOfType<PlayerDNA>();
    56.  
    57.         FillLists();
    58.         Refresh();
    59.     }
    60.  
    61.     private void OnDisable()
    62.     {
    63.         dummyCamera.SetActive(false);
    64.     }
    65.  
    66.     private void FillLists()
    67.     {
    68.         eyeObjects = ResourceReader.Instance.eyeObjects;
    69.         materialObjects = ResourceReader.Instance.materialObjects;
    70.         colorObjects = ResourceReader.Instance.colorObjects;
    71.         topObjects = ResourceReader.Instance.topObjects;
    72.         sideObjects = ResourceReader.Instance.sideObjects;
    73.         frontObjects = ResourceReader.Instance.frontObjects;
    74.         botObjects = ResourceReader.Instance.botObjects;
    75.     }
    76.  
    77.     private void Refresh()
    78.     {
    79.         //index Fix
    80.  
    81.         testerBall.SetActive(false);
    82.         testerBody.SetActive(false);
    83.         testerTop.SetActive(false);
    84.         testerSide.SetActive(false);
    85.         testerFront.SetActive(false);
    86.         testerBot.SetActive(false);
    87.         testerEyes.SetActive(false);
    88.         locked.SetActive(false);
    89.  
    90.         switch (typeOfObject)
    91.         {
    92.             case "eyes":
    93.                 testerBody.SetActive(true);
    94.                 testerEyes.SetActive(true);
    95.  
    96.                 if(indexEyes > eyeObjects.Count - 1) { indexEyes = 0; }
    97.                 if(indexEyes < 0) { indexEyes = eyeObjects.Count - 1; }
    98.  
    99.                 switch (DataManager.Instance.language)
    100.                 {
    101.                     case "english":
    102.                         label.text = eyeObjects[indexEyes].labelEnglish; break;
    103.                     case "portuguese":
    104.                         label.text = eyeObjects[indexEyes].labelPortuguese; break;
    105.                     case "spanish":
    106.                         label.text = eyeObjects[indexEyes].labelSpanish; break;
    107.                     default:
    108.                         label.text = eyeObjects[indexEyes].labelEnglish; break;
    109.                 }
    110.                 if (!eyeObjects[indexEyes].unlocked) { locked.SetActive(true); }
    111.                 testerEyes.GetComponent<Renderer>().material.SetTexture("_MainTex", eyeObjects[indexEyes].high);
    112.                 testerEyes.GetComponent<Renderer>().material.color = DataManager.Instance.eyeColor.color;
    113.                 testerBody.GetComponent<Renderer>().material = DataManager.Instance.bodyMaterial.material;
    114.                 testerBody.GetComponent<Renderer>().material.color = DataManager.Instance.bodyColor.color;
    115.                 break;
    116.  
    117.             case "material":
    118.                 testerBall.SetActive(true);
    119.  
    120.                 if (indexMaterial > materialObjects.Count - 1) { indexMaterial = 0; }
    121.                 if (indexMaterial < 0) { indexMaterial = materialObjects.Count - 1; }
    122.  
    123.                 switch (DataManager.Instance.language)
    124.                 {
    125.                     case "english":
    126.                         label.text = materialObjects[indexMaterial].labelEnglish; break;
    127.                     case "portuguese":
    128.                         label.text = materialObjects[indexMaterial].labelPortuguese; break;
    129.                     case "spanish":
    130.                         label.text = materialObjects[indexMaterial].labelSpanish; break;
    131.                     default:
    132.                         label.text = materialObjects[indexMaterial].labelEnglish; break;
    133.                 }
    134.                 if (!materialObjects[indexMaterial].unlocked) { locked.SetActive(true); }
    135.                 testerBall.GetComponent<Renderer>().material = materialObjects[indexMaterial].material;
    136.                 testerBall.GetComponent<Renderer>().material.color = DataManager.Instance.bodyColor.color;
    137.                 break;
    138.  
    139.             case "top":
    140.                 testerBody.SetActive(true);
    141.                 testerTop.SetActive(true);
    142.  
    143.                 Debug.Log("top list count = " + topObjects.Count + " top index = " + indexTop);
    144.  
    145.                 if (indexTop > topObjects.Count - 1) { indexTop = 0; }
    146.                 if (indexTop < 0) { indexTop = topObjects.Count - 1; }
    147.  
    148.                 switch (DataManager.Instance.language)
    149.                 {
    150.                     case "english":
    151.                         label.text = topObjects[indexTop].labelEnglish; break;
    152.                     case "portuguese":
    153.                         label.text = topObjects[indexTop].labelPortuguese; break;
    154.                     case "spanish":
    155.                         label.text = topObjects[indexTop].labelSpanish; break;
    156.                     default:
    157.                         label.text = topObjects[indexTop].labelEnglish; break;
    158.                 }
    159.                 if (!topObjects[indexTop].unlocked) { locked.SetActive(true); }
    160.                 testerTop.GetComponent<MeshFilter>().mesh = DataManager.Instance.topItem.mesh;
    161.                 testerTop.GetComponent<Renderer>().material = materialObjects[indexTop].material;
    162.                 testerTop.GetComponent<Renderer>().material.color = DataManager.Instance.topColor.color;
    163.                 testerBody.GetComponent<Renderer>().material = DataManager.Instance.bodyMaterial.material;
    164.                 testerBody.GetComponent<Renderer>().material.color = DataManager.Instance.bodyColor.color;
    165.                 break;
    166.  
    167.             case "side":
    168.                 testerBody.SetActive(true);
    169.                 testerSide.SetActive(true);
    170.  
    171.                 if (indexSide > sideObjects.Count - 1) { indexSide = 0; }
    172.                 if (indexSide < 0) { indexSide = sideObjects.Count - 1; }
    173.  
    174.                 switch (DataManager.Instance.language)
    175.                 {
    176.                     case "english":
    177.                         label.text = sideObjects[indexSide].labelEnglish; break;
    178.                     case "portuguese":
    179.                         label.text = sideObjects[indexSide].labelPortuguese; break;
    180.                     case "spanish":
    181.                         label.text = sideObjects[indexSide].labelSpanish; break;
    182.                     default:
    183.                         label.text = sideObjects[indexSide].labelEnglish; break;
    184.                 }
    185.                 if (!sideObjects[indexSide].unlocked) { locked.SetActive(true); }
    186.                 testerSide.GetComponent<MeshFilter>().mesh = DataManager.Instance.sideItem.mesh;
    187.                 testerSide.GetComponent<Renderer>().material = materialObjects[indexSide].material;
    188.                 testerSide.GetComponent<Renderer>().material.color = DataManager.Instance.sideColor.color;
    189.                 testerBody.GetComponent<Renderer>().material = DataManager.Instance.bodyMaterial.material;
    190.                 testerBody.GetComponent<Renderer>().material.color = DataManager.Instance.bodyColor.color;
    191.                 break;
    192.  
    193.             case "front":
    194.                 testerBody.SetActive(true);
    195.                 testerFront.SetActive(true);
    196.  
    197.                 if (indexFront > frontObjects.Count - 1) { indexFront = 0; }
    198.                 if (indexFront < 0) { indexFront = frontObjects.Count - 1; }
    199.  
    200.                 switch (DataManager.Instance.language)
    201.                 {
    202.                     case "english":
    203.                         label.text = frontObjects[indexFront].labelEnglish; break;
    204.                     case "portuguese":
    205.                         label.text = frontObjects[indexFront].labelPortuguese; break;
    206.                     case "spanish":
    207.                         label.text = frontObjects[indexFront].labelSpanish; break;
    208.                     default:
    209.                         label.text = frontObjects[indexFront].labelEnglish; break;
    210.                 }
    211.                 if (!frontObjects[indexFront].unlocked) { locked.SetActive(true); }
    212.                 testerFront.GetComponent<MeshFilter>().mesh = DataManager.Instance.frontItem.mesh;
    213.                 testerFront.GetComponent<Renderer>().material = materialObjects[indexFront].material;
    214.                 testerFront.GetComponent<Renderer>().material.color = DataManager.Instance.frontColor.color;
    215.                 testerBody.GetComponent<Renderer>().material = DataManager.Instance.bodyMaterial.material;
    216.                 testerBody.GetComponent<Renderer>().material.color = DataManager.Instance.bodyColor.color;
    217.                 break;
    218.  
    219.             case "bot":
    220.                 testerBody.SetActive(true);
    221.                 testerBot.SetActive(true);
    222.  
    223.                 if (indexBot > botObjects.Count - 1) { indexBot = 0; }
    224.                 if (indexBot < 0) { indexBot = botObjects.Count - 1; }
    225.  
    226.                 switch (DataManager.Instance.language)
    227.                 {
    228.                     case "english":
    229.                         label.text = botObjects[indexBot].labelEnglish; break;
    230.                     case "portuguese":
    231.                         label.text = botObjects[indexBot].labelPortuguese; break;
    232.                     case "spanish":
    233.                         label.text = botObjects[indexBot].labelSpanish; break;
    234.                     default:
    235.                         label.text = botObjects[indexBot].labelEnglish; break;
    236.                 }
    237.                 if (!botObjects[indexBot].unlocked) { locked.SetActive(true); }
    238.                 testerBot.GetComponent<MeshFilter>().mesh = DataManager.Instance.botItem.mesh;
    239.                 testerBot.GetComponent<Renderer>().material = materialObjects[indexBot].material;
    240.                 testerBot.GetComponent<Renderer>().material.color = DataManager.Instance.botColor.color;
    241.                 testerBody.GetComponent<Renderer>().material = DataManager.Instance.bodyMaterial.material;
    242.                 testerBody.GetComponent<Renderer>().material.color = DataManager.Instance.bodyColor.color;
    243.                 break;
    244.         }
    245.     }
    246.  
    247.     public void Set()
    248.     {
    249.         switch (typeOfObject)
    250.         {
    251.             case "eyes":
    252.                 if (!eyeObjects[indexEyes].unlocked) break;
    253.                 DataManager.Instance.eyeObject = eyeObjects[indexEyes];
    254.                 _playerDNA.Refresh();
    255.                 break;
    256.             case "material":
    257.                 if (!materialObjects[indexMaterial].unlocked) break;
    258.                 DataManager.Instance.bodyMaterial = materialObjects[indexMaterial];
    259.                 _playerDNA.Refresh();
    260.                 break;
    261.             case "top":
    262.                 if (!topObjects[indexTop].unlocked) break;
    263.                 DataManager.Instance.topMaterial = materialObjects[indexTop];
    264.                 _playerDNA.Refresh();
    265.                 break;
    266.             case "side":
    267.                 if (!sideObjects[indexSide].unlocked) break;
    268.                 DataManager.Instance.sideMaterial = materialObjects[indexSide];
    269.                 _playerDNA.Refresh();
    270.                 break;
    271.             case "front":
    272.                 if (!frontObjects[indexFront].unlocked) break;
    273.                 DataManager.Instance.frontMaterial = materialObjects[indexFront];
    274.                 _playerDNA.Refresh();
    275.                 break;
    276.             case "bot":
    277.                 if (!botObjects[indexBot].unlocked) break;
    278.                 DataManager.Instance.botMaterial = materialObjects[indexBot];
    279.                 _playerDNA.Refresh();
    280.                 break;
    281.         }
    282.     }
    283.  
    284.     public void ChangeTypeOfObject(string value)
    285.     {
    286.         foreach (Transform child in transform.parent)
    287.         {
    288.             child.GetComponent<DummyBehaviour>().typeOfObject = value;
    289.             child.GetComponent<DummyBehaviour>().Refresh();
    290.         }
    291.     }
    292.  
    293.     public void IndexAdd()
    294.     {
    295.         int amount = 3;
    296.         while (amount > 0)
    297.         {
    298.             amount--;
    299.             switch (typeOfObject)
    300.             {
    301.                 case "eyes":
    302.                     if (indexEyes < eyeObjects.Count -1) indexEyes += 1;
    303.                     else indexEyes = 0;
    304.                     break;
    305.                 case "material":
    306.                     if (indexMaterial < materialObjects.Count -1) indexMaterial += 1;
    307.                     else indexMaterial = 0;
    308.                     break;
    309.                 case "top":
    310.                     if (indexTop < topObjects.Count -1) indexTop += 1;
    311.                     else indexTop = 0;
    312.                     break;
    313.                 case "side":
    314.                     if (indexSide < sideObjects.Count -1) indexSide += 1;
    315.                     else indexSide = 0;
    316.                     break;
    317.                 case "front":
    318.                     if (indexFront < frontObjects.Count -1) indexFront += 1;
    319.                     else indexFront = 0;
    320.                     break;
    321.                 case "bot":
    322.                     if (indexBot < botObjects.Count -1) indexBot += 1;
    323.                     else indexBot = 0;
    324.                     break;
    325.             }
    326.         }
    327.         Refresh();
    328.     }
    329.  
    330.     public void IndexSubtract()
    331.     {
    332.         int amount = 3;
    333.         while (amount > 0)
    334.         {
    335.             amount--;
    336.  
    337.             switch (typeOfObject)
    338.             {
    339.                 case "eyes":
    340.                     if (indexEyes > 0) indexEyes -= 1;
    341.                     else indexEyes = eyeObjects.Count -1;
    342.                     break;
    343.                 case "material":
    344.                     if (indexMaterial > 0) indexMaterial -= 1;
    345.                     else indexMaterial = materialObjects.Count -1;
    346.                     break;
    347.                 case "top":
    348.                     if (indexTop > 0) indexTop -= 1;
    349.                     else indexTop = topObjects.Count -1;
    350.                     break;
    351.                 case "side":
    352.                     if (indexSide > 0) indexSide -= 1;
    353.                     else indexSide = sideObjects.Count -1;
    354.                     break;
    355.                 case "front":
    356.                     if (indexFront > 0) indexFront -= 1;
    357.                     else indexFront = frontObjects.Count -1;
    358.                     break;
    359.                 case "bot":
    360.                     if (indexBot > 0) indexBot -= 1;
    361.                     else indexBot = botObjects.Count -1;
    362.                     break;
    363.             }
    364.         }
    365.         Refresh();
    366.     }
    367.  
    368. }
    369.  
     
  6. Antistone

    Antistone

    Joined:
    Feb 22, 2014
    Posts:
    2,836
    "index" is what the variable is called inside of the library function that actually threw the exception.

    Post the code and clearly indicate which line the error is referencing. (The line number doesn't help us when you only post an excerpt.)
     
  7. PHSenki

    PHSenki

    Joined:
    Feb 6, 2018
    Posts:
    13
    I apologize

    The line "(at Assets/DummyBehaviour.cs:245)" is the very end of the Refresh method, the closing bracket.

    The line counting is the same as on Visual Studio, I believe it could be anything inside this method then.
     
  8. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,735
    You could try using 'Attach to Unity' in Visual Studio and then set a breakpoint at the start of the function where the error happens, and then single step through the code and watch the value of variables etc. up until the error occurs.
     
  9. Antistone

    Antistone

    Joined:
    Feb 22, 2014
    Posts:
    2,836
    If you think it could be anything in the method, then post the entire method.

    It's also often helpful to share the exact types of the variables. For instance, a List<Foo> and a Dictionary<int, Foo> are importantly different, but might look syntactically similar in a code snippet where you can't see the type declaration.
     
  10. Antistone

    Antistone

    Joined:
    Feb 22, 2014
    Posts:
    2,836
    On lines 161, 187, 213, & 239 you are accessing the list materialObjects using an index variable that has been checked against the bounds of some other list.
     
  11. bobisgod234

    bobisgod234

    Joined:
    Nov 15, 2016
    Posts:
    1,042
    Some possibilities:

    * Your arrays are empty. You clamp the index to the arrays length, but do not test if the array is empty before accessing it
    * In the "material" case, you clamp "indexMaterial" to the "materialObjects" array length (which makes sense), but in other cases, you use other index variables (that have not been clamped) to access elements from the "materialObjects" array, such as this line on 239:

    Code (CSharp):
    1. testerBot.GetComponent<Renderer>().material = materialObjects[indexBot].material;
    2.  
    This seems suspicious to me. If your "materialObject" array is shorter than your other arrays (in this case, your "botObjects" array), there would be a possibility of getting this exception.
     
    Last edited: Oct 14, 2020
  12. PHSenki

    PHSenki

    Joined:
    Feb 6, 2018
    Posts:
    13
    Thank you very much! That's it! <3