Flocking | 2D Flocking in the Unity3D game engine using Craig Reynolds
kandi X-RAY | Flocking Summary
kandi X-RAY | Flocking Summary
2D implementation of Craig Reynolds' boids in the Unity3D game engine.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of Flocking
Flocking Key Features
Flocking Examples and Code Snippets
Community Discussions
Trending Discussions on Flocking
QUESTION
Other questions that I viewed before posting this question:
Debug Assertion Failed: Vector subscript out of range
Debug Assertion Failed Vector Subscript Out of Range C++
I am working on a Boids project, details of which can be found here:
https://www.red3d.com/cwr/boids/
From what I can gather my issue is something to do with an index getting accessed by the function but no data is present in the index. I had this issue yesterday in a different area of my code and fixed it by making one of my getters return a reference rather than a copy of a class object. That approach seems to not be the issue today.
Below is my code:
This code is a snippet from my function that handles simulation events. This is the code that I have narrowed down the issue to.
...ANSWER
Answered 2021-May-15 at 22:42I see nothing in this code that can cause an out of bounds access. However, you should not increment i
on any loop iteration that removes an organism, otherwise you will skip the next organism in the list.
Imagine on the 1st loop iteration, the organism at index 0 needs to be removed. Subsequent organisms move down the list. On the next loop iteration, i
gets incremented to 1, and the organism that had moved into index 0 is skipped.
Try this instead:
QUESTION
I have a boids flocking simulation setup. It originally worked by having every boid loop through every boid so that they all constantly know where each other are at in order to tell if they are close or far away, but then I switched to a quadtree design so that boids only have to loop through boids that are actually nearby. However, it has made virtually no improvement to the simulation's FPS. It's as if I'm still looping through every single boid.
Is there some mistake in my implementation? Repo is here, relevant code is mostly in main.js, quadtree.js, and boid.js. LIve site is here
...ANSWER
Answered 2021-May-02 at 13:02The reason why you are not seeing obvious performance gains from the Quadtree is because of the nature of your simulation. Currently, the default separation causes a large number of boids to "converge" to the same position.
Lots of objects in the same position is going to negate possible speedups due to spatial partitioning. If all the objects are in the same or near position, boids in the area a forced to check against all other boids in the area.
You can demonstrate to yourself that your Quadtree is working by watching or profiling your application with its default settings. Now turn separation up to maximum. You will see visually, or through profiling, that as the boids spread out more evenly, the FPS increases significantly. This is because the Quadtree can now prevent computations thanks to its spatial partitioning.
You can see how performance is increased in the second image. Also note, that the conjecture by another commentor that it is the construction of the Quadtree (insert
) that is taking up all the time is wrong.
While in some applications you may be able to update a Quadtree as things move around, since in this simulation every constituent moves every frame, reconstructing the Quadtree from scratch is less work, then taking every object out and reinserting it into its new position.
The advice to skip square-rooting and just use the distance-squared is good though as this will get you a bit more performance.
QUESTION
I am writing a model in NetLogo where I start with a 5 turtles populations in colours (blue, green, yellow, red, white) with random starting co-ordinates. When I run the model, I want when the white turtle meets the green or yellow or red turtle, they become joined with it and move together as a group. And when the white turtle meets the blue turtle, it separates from it and both continue moving randomly. I saw the example model for bird flocking in the model library and I have been trying to modify it for my model (see code attached).
In the 'flocking example' from the models' library, turtles are set to align, cohere and separate when too close to each other (depending on the distance for the nearest-neighbour and minimum-separation). This works well and I was able to use it to tell turtles to flock, keeping them intact as a group as they continue to move. My question is how to get only the (green, yellow, red) turtles to flock when they meet the white turtles and leaving the blue turtles moving randomly.
...ANSWER
Answered 2020-Aug-19 at 11:18You can make two different types of turtles-own with their own rules. I did a multi agents works and everyone has their owns rules and with deafferents turtles-own group everything works like a charm.
QUESTION
I am studying flocking behavior in netlogo, and in order to keep track of various flocks I am using a hidden "flock-holder" turtle that I can hatch or let die if a new flock is created or an existing flock runs out of members. I am coming across an issue however, where on occasion when I am trying to interface with some data within a flock, as referred to through an individual member of a flock, I get a message saying "That is dead", causing the code to fail.
From what I understand of the "die" command, if a turtle of any kind dies, it should remove itself from any agentset or variable that references it, and therefore this sort of error shouldn't be a problem? How can I fix or at least debug this strange issue?
Code of my flock-evaluation function that is having the issues below:
...ANSWER
Answered 2020-Jun-20 at 12:06I can't test this, but I expect that the error stems from agent prey 2
having a reference to a flock-holder
that has died. When a flock-holder
dies, it is (as you know) deleted from any angentsets that it was a member of and variables that hold a pointer to it are reset to point to nobody
. However, NetLogo is smart enough to know that this nobody
is a dead flock-holder
and gives you the error message you've encountered. If after the error you inspected prey 2
, or entered show [flock-reference] of prey 2
at the command line, I expect that you would find that flock-reference
was indeed set to nobody
.
My guess is that somewhere in your code, not all the prey that were in the (now dead) flock were reassigned to another flock, but rather kept their old value of flock-reference
, now nobody
. When you ask a flock to die, you might add the line show preys with [flock-reference = nobody]
. If there are any, you could track down why.
Hope this helps, Charles
QUESTION
I am designing a boid system using Unity. I deal with the awareness radius by adding a boid to the "Swarm" list when it enters a collider. In order to find the force for each boid, I need to cycle through the swarm list, access the "Boid" class, and retrieve velocity and position.
ProblemThe Boid classes from each swarm entity are added to a new list, and passed to the physics controller. However, a NullReferenceException is thrown at line 96, and I don't understand why that variable would be null. As far as I know, accessing a populated Enumerable
using foreach should have variables within.
NullReferenceException: Object reference not set to an instance of an object Boid.Alignment (System.Collections.Generic.IEnumerable`1[T] boids) (at Assets/Scripts/Boid.cs:96) Boid.Update () (at Assets/Scripts/Boid.cs:42)
After testing, it seems it is thrown when accessing any part of the new list of Boids.
Why does my new list contain no data? Is there a better way to handle a 2D implementation of boids in a 3D space? Is there a resource I can use to better understand Linq?
P.S. I am very new to using Linq systems, and most of this code is taken from this video and this Unity project script
Code ...ANSWER
Answered 2020-Apr-30 at 19:42Turns out I was assigning null data, because the GetComponent function at line 40 found the "Body" of the boids, which did not have a Boid script attached. When searching with GetComponentInChildren, the array is populated and values are given.
The Old Line:
IEnumerable boids = swarm.Select(o => o.GetComponent()).ToList();
The New Line:
IEnumerable boids = swarm.Select(o => o.GetComponentInChildren()).ToList();
QUESTION
I'm a very new coder, honestly confused most of the time, Any advice would be great. I was doing an exercise from Dan Shiffman vids. I’m trying to paint a line or a stroke with pixel data from a live webcam. Two canvas, one live webcam tiny and a large canvas that has a lot of ellipse that are colored in pixel rgb from pixel array This is an image of my final product
I made a separate file for the particle and then used a constructor function and a loop to display and update in draw(), while in the particle file I tried to use a line instead of an ellipse by using an array of past positions of the object. However, it won’t work? The canvas just appears grey. In the particle.js file, when I used the line() function, and when I use the ellipse() I don't get a painterly brushstroke effect, Not sure if my logic is correct. Here is the code -> I’m sorry there's a lot. The first bit is the particle.js file and the second is the main sketch file.
...ANSWER
Answered 2020-Apr-02 at 14:58There are 2 simple issues.
You got an error in show
, because the index i+1
is out of bounds in this.history[i + 1].x
. Run the for
loop from 0 to history.length-1
, to solve the issue:
for (let i = 0; i < this.history.length; i++)
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install Flocking
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page