Home > OS >  Exclude items in an array in unity 2021
Exclude items in an array in unity 2021

Time:03-23

I've begun working on an early alpha menu for my game and I've was wondering how to exclude items in an array, specifically in unity. I'm trying to make every item except the currently used one. I don't know how I should go about it, if anyone could help, that would be amazing.

here's my current code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class CS
{
    public List<GameObject> CanvasButtons;
}
public class CanvasSwitcher : MonoBehaviour
{
    
    public List<CS> Screen = new List<CS>();
    static int switcher;
    public static void ScreenSwitchPlus()
    {
        switcher  = 1;
    }
    public static void ScreenSwitchMinus()
    {
        switcher -= 1;
    }
    public void Update()
    {
        
        foreach(GameObject l in Screen[switcher].CanvasButtons)
        {
            l.SetActive(true);
        }
        
    }

}

CodePudding user response:

It would be wiser to use for loop instead of foreach loop here:

public void Update()
{
    int ignore = 2;

    for(int i = 0; i < Screen[switcher].CanvasButtons.Count; i  )
    {
        if(i != ignore)
            Screen[switcher].CanvasButtons[i].SetActive(true);
        else
            Screen[switcher].CanvasButtons[i].SetActive(false);
    }        
}

It could be even shorter without if (admit less readable):

public void Update()
{
    int ignore = 2;

    for(int i = 0; i < Screen[switcher].CanvasButtons.Count; i  )
    {
        Screen[switcher].CanvasButtons[i].SetActive(i != ignore);
    }        
}

... and even shorter with taking CanvasButtons out of loop:

public void Update()
{
    int ignore = 2;

    var collection = Screen[switcher].CanvasButtons;

    for(int i = 0; i < collection.Count; i  )
    {
        collection[i].SetActive(i != ignore);
    }        
}

CodePudding user response:

I got it! I was a bit null-brained for a while there, I messed up a few values in the second for statement, but I got it. I'll post the code here. I keep forgetting little things in the math. Like I always say, I don't solve problems, I make them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class CS
{
    public List<GameObject> CanvasButtons;
}
public class CanvasSwitcher : MonoBehaviour
{
    public List<CS> Screen = new List<CS>();
    static int switcher;
    public static void ScreenSwitchPlus()
    {
        switcher  = 1;
    }
    public static void ScreenSwitchMinus()
    {
        switcher -= 1;
    }
    public void FixedUpdate()
    {
        List<CS> csco = Screen;
        for(int i1 = 0; i1 < csco.Count;)
        {

            List<GameObject> collection = csco[i1].CanvasButtons;
            for (int i = 0; i < collection.Count; i  )
            {
                collection[i].SetActive(i1 == switcher);
                switch(i == collection.Count - 1)
                {
                    case true:
                        i1  ;
                        break;
                }
            }
        }
        
    }

}
  • Related