- Home /
The question is answered, right answer was accepted
My unity STOPS RESPONDING when this function is activated
So whenever I click play everything is fine however when I do something that calls this function:
void SwapCards()
{
string Temp = "tmp";
for (int i = 0; i < isSelected.Count; i++)
{
for (int j = i + 1; i < isSelected.Count; j++)
{
if (isSelected[i] == true && isSelected[j] == true)
{
Temp = Peçass[i];
Peçass[i] = Peçass[j];
Peçass[j] = Temp;
}
}
}
howManySelected = 0;
}
the Unity engine stops responding. I've tried to comment this function out and the engine keeps running fine so this one is definitely the problem. What can I do to fix this?
Here's all the code where this function is involved for better context:
private void Update()
{
TimeStep = FindObjectOfType<GridCreation>().timeStep;
if (Input.GetKeyDown(KeyCode.P))
{
canMove = !canMove;
}
if (canMove)
{
if (!isRunning)
{
StartCoroutine(AplicarMovimento());
}
}else { StopCoroutine(AplicarMovimento()); isRunning = false; }
if (howManySelected == 2)
{
SwapCards();
}
AbrirHotbar();
FillImages();
}
public void OnPointerClick(PointerEventData eventData) //Deteta os "clicks" no UI
{
for (int i = 0; i < Peçass.Count; i++)
{
Transform carta = Hotbar.transform.GetChild(i);
if (carta == eventData.pointerCurrentRaycast.gameObject.transform)
{
isSelected[i] = true; //A carta onde deu click fica "selecionada"
howManySelected++;
}
}
}
void SwapCards()
{
string Temp = "tmp";
for (int i = 0; i < isSelected.Count; i++)
{
for (int j = i + 1; i < isSelected.Count; j++)
{
if (isSelected[i] == true && isSelected[j] == true)
{
Temp = Peçass[i];
Peçass[i] = Peçass[j];
Peçass[j] = Temp;
}
}
}
howManySelected = 0;
}
The Unity version I'm using is 2020.2.2f1
Thank you!
unity might think the loop is infinite. I've ran into that issue before. Altho the highlighting on Peçass is weird.. I wonder if the accented ç counts as a special character.
Answer by Llama_w_2Ls · Feb 07, 2021 at 04:16 PM
It might be this line: for (int j = i + 1; i < isSelected.Count; j++)
. I believe it should be for (int j = 1; j < isSelected.Count; j++)
The reason this causes a crash, is because your for loop never ends. It ends when i is less that isSelected.Count, however, i is never incremented in the for loop. Only j is. Therefore the loop will never end. @DiasPTW
Yeah, I actually just saw this and was about to close the thread because of it xD. Thank you so much!
@DiasPTW I have a question to ask you about this site. It's not rhetorical. Do you see, on this post, one upvote, or zero. I see zero, and recently I've been getting issues where all my posts with upvotes lose upvotes for no explained reason. Did you downvote this? Thanks.
Also if anyone else knows what's going on, it would be nice to here from you. I already posted a question on $$anonymous$$ETA regarding this issue.