- Home /
How to find IndexOf vector3 List ? position search
Hi community
I got a problem to find the index number of an vector3 list. Inside the vector are gameobject's with their position.
rotesSpielFeld = new List<Vector3>();
rotesSpielFeld.Add(GameObject.Find("SFeld1").transform.position);
....
rotesSpielFeld.Add(GameObject.Find("SFeld40").transform.position);
The list got 40 fields.
Then I got a function to change position of the player (which should only move on the positions inside the list)
public void positionWechsel()
{
diceValue= GameObject.Find("Würfel").GetComponent<AktuellerWürfelWert>().aktuellerWert;
numberOfIndex= GameObject.Find("gameController").GetComponent<gameController>().rotesSpielFeld.IndexOf(GameObject.Find("SpielerR1").transform.position);
// Debug.Log says here the indexNumber is -1
//put the player on the new position from indexNumber + diceValue
GameObject.Find("gameController").GetComponent<gameController>().aktuellePosiR1 = GameObject.Find("gameController").GetComponent<gameController>().rotesSpielFeld[numberOfIndex+ diceValue];
Can someone Help me please?
Answer by Ali-hatem · May 02, 2016 at 10:09 AM
numberOfIndex= GameObject.Find("gameController").GetComponent<gameController>().rotesSpielFeld.FindIndex( d=>d == GameObject.Find("SpielerR1").transform.position);
GameObject.Find("SpielerR1").transform.position = GameObject.Find("gameController").GetComponent<gameController>().rotesSpielFeld[numberOfIndex+ diceValue];
Yeah!! this works!!!!
awesome! :)
now i have just to find out, whats with the button. the tutorial just said how to use button. i know how. BUT FIRST REAL NICE :D THAN$$anonymous$$ YOU!
glad to hear that . & i see you have made the function public so you can call it from on click event
i tried it, the result was an infinit loop, then i put some new var's in my gamecontroller and another infitnit loop :(
look here http://answers.unity3d.com/questions/1179954/why-infinit-loop-what-im-doing-wrong.html
Answer by Outliver · May 02, 2016 at 10:35 AM
That's because you don't have the actual player transform.position reference in your rotesSpielFeld - only another Vector3 Object with the same values - you would need to do a compare within a loop. Like so:
var theIndex = -1;
var myList = GameObject.Find("gameController").GetComponent<gameController>().rotesSpielFeld;
var playerPos = GameObject.Find("SpielerR1").transform.position;
for ( int i = 0; i < myList.Length; i++ )
{
if ( ( myList[ i ] - playerPos ).magnitude == 0f )
{
theIndex = i;
break;
}
}
(untested code)
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
A List of Lists 1 Answer
Combine Children Dictionary in place of Hashtable? 2 Answers
Camera rotation around player while following. 6 Answers
List of bools assigned to each Gameobject in List/Array 0 Answers