# Can someone solve this short complex code for me

Hi i have a code which i know that works my level in programming is pretty good but i lack
the understanding of high level coding like this one

`````` GameObject[] gos;

GameObject closest;

void Update(){
float distance = Mathf.Infinity;

foreach (GameObject go in gos) {
Vector3 diff = go.transform.position - transform.position;
float curDistance = diff.sqrMagnitude;
if (curDistance < distance) {
closest = go;
distance = curDistance;
}
``````

i am going to tell you what i know and hope u can correct me if i am wrong

``````   foreach (GameObject go in gos) {
Vector3 diff = go.transform.position - transform.position;
``````

here for every go gameobject in gos gameobjects we find the distance between every go and the player

``````           float curDistance = diff.sqrMagnitude;
``````

here we made a float and sat it to diff.sqrMagnitude which is a tool that compares 2 vectors()distance and give you the smallest one am i right?

if (curDistance < distance) {
closest = go;
distance = curDistance;
}

for some reason curDistance represent the smallest distance between all the gameobjects in the array even though diff can hold 1 object at a time and sqrMagnitude does two objects at a time which is so confusing

what is even confusing more is setting the distance which is infinite number to the smallest distance which cancels the if statement which i don’t know why it does that

i really don’t know why but i feel that this code represent the difference between me and the programmers who studied at college and got a degree on C# am i right?

ok basically,

``````foreach (GameObject go in gos) {
Vector3 diff = go.transform.position - transform.position;
``````

(Above Code) - this finds the coordinate difference between the player and the gameobject being checked and gets set as a Vector3 called “diff”.

``````float curDistance = diff.sqrMagnitude;
``````

(Above Code) - this basically converts the Vector3 “diff” into a float ( into an actual distance rather than a (x,y,z) coords by using maths ) and this is set as a float called " curDistance ".

``````if (curDistance < distance) {
closest = go;
distance = curDistance;
}
``````

(Above Code) - this compares the current closest distance ( which is set at the top outside the foreach loop as “float distance = Math.Infinity;”), with the distance that was found now.
If the distance found now is smaller than the one that is set, then the new gameobject called “closest” is set as the one that was just checked for distance, and the new shortest distance is set as “distance”.

Now this keeps looping for each of the gameobjects in the gameobject array of “gos”

in simple terms what this code does is:

1. Sets current shortest distance to infinity
2. Start for each loop for every gameobject in gameobject gos array
3. find the Vector3 coords difference between player and object currently being checked
4. make these coords into a float distance
5. compare current shortest distance with the one found now
6. if distance found now is shorter than current set shortest distance then set this shorter distance as current shortest distance
7. and also set the currently checked gameobject in the loop as closest gameobject
8. after all gameobjects checked = loop finishes