- Home /
Conditional operator problem S:
hi, i want to make a picture selector, and i try to use this line of code:
int avatarSelected = 0;
public Texture[] avatarTextures;
GUI.DrawTexture(new Rect(195.0f, 130.0f, 300.0f, 300.0f), avatarTextures[avatarSelected], ScaleMode.ScaleToFit, alphaBlendEnabled);
if (GUI.Button(new Rect(525.0f, 250.0f, 45.0f, 50.0f), ">"))
{
avatarSelected = (avatarSelected > avatarTextures.Lenght - 1) ? avatarSelected + 1 : avatarSelected = avatarTextures.Lenght - 1;
}
if (GUI.Button(new Rect(148.0f, 250.0f, 45.0f, 50.0f), "<"))
{
avatarSelected = (avatarSelected < 0) ? avatarSelected - 1 : avatarSelected = 0;
}
But when i switch the picture from button "<" it works, but ">" continue to go out of array. It's a bug or is just my fault? S:
Answer by KiraSensei · May 21, 2013 at 12:09 PM
I think your tests are wrong.
avatarSelected = (avatarSelected > avatarTextures.length - 1) ? avatarSelected + 1 : avatarSelected = avatarTextures.length - 1;
means that if avatarSelected is more than avatarTextures.length - 1, you increment it. So there is an out of array error. Your code should be :
int avatarSelected = 0;
public Texture[] avatarTextures;
GUI.DrawTexture(new Rect(195.0f, 130.0f, 300.0f, 300.0f), avatarTextures[avatarSelected], ScaleMode.ScaleToFit, alphaBlendEnabled);
if (GUI.Button(new Rect(525.0f, 250.0f, 45.0f, 50.0f), ">"))
{
avatarSelected = (avatarSelected > avatarTextures.length ) ? avatarSelected = avatarTextures.length - 1 : avatarSelected + 1;
}
if (GUI.Button(new Rect(148.0f, 250.0f, 45.0f, 50.0f), "<"))
{
avatarSelected = (avatarSelected < 0) ? avatarSelected = 0 : avatarSelected - 1;
}
Ty for the quickly answer, anyway i try your code but now all 2 buttons not work, and return me by console IndexOutOfRangeException :(( I tried also
if(avatarSelected > avatarTextures.Length - 1)
avatarSelected = avatarTextures.Length - 1;
else
avatarSelected++;
but still not work S:
I edited my answer, you used avatarSelected.Lenght, ins$$anonymous$$d of avatarSelected.length
Did you code compile with this error ?
You need to test avatarSelected after incrementation or decrementation (avatarSelected +1 or avatarSelected -1, not avatarSelected only)
I solve the problem, is:
GUI.DrawTexture(new Rect(195.0f, 130.0f, 300.0f, 300.0f), avatarTextures[avatarSelected], Scale$$anonymous$$ode.ScaleToFit, alphaBlendEnabled);
if (GUI.Button(new Rect(525.0f, 250.0f, 45.0f, 50.0f), ">", "Title"))
{
avatarSelected = (avatarSelected >= avatarTextures.Length - 1) ? avatarSelected = avatarTextures.Length - 1 : avatarSelected + 1;
}
if (GUI.Button(new Rect(148.0f, 250.0f, 45.0f, 50.0f), "<", "Title"))
{
avatarSelected = (avatarSelected < 0) ? avatarSelected = 0 : avatarSelected - 1;
}
Is to check, if is greater equal avatarTextures.Length - 1 go on...
LOL, one day this errors kill me! xD
Thanks a lot for
avatarSelected = (avatarSelected < 0) ? avatarSelected = 0 : avatarSelected - 1;
It was very helpful =) (change < to <= too)
Cool !
If it helped, please tick the answer to say that it corrected your problem !
Your answer
![](https://koobas.hobune.stream/wayback/20220613102645im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Unity3D gibberish in menus 1 Answer
Click and drag - Object go through other objects when dragging 1 Answer
Dragrigidbody big problem. Modification script. 1 Answer
Terrain brush duplicates and warps. 0 Answers
Unity Coroutine problem 1 Answer