warning: variable 'b' set but not used
C++ is not Java. You can't just assign structs like that - it copies them (if anything).

Boid b = boids[I]; // &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; this line!
b.start_animate_time = 456;


Instead just access the array slice directly:

boids[i].start_animate_time = 456;


And later on as well:

Serial.println(boids[i].start_animate_time);


Basically, you create a "Boid" variable called "b", copy the content of boids[i] to it, set a value in that variable, and then throw it away. Hence the "not used". If you want to reference a specific array slice as a separate variable either get a pointer to it:

Boid *b = &amp;boids[i];
b-&gt;start_animate_time = 456;


Or use a reference:

Boid &amp;b = boids[i];
b.start_animate_time = 456;


Of the two I prefer using a pointer, but I come from a C background and understand pointers, but it took me many years of trial and error to get to that point...