diff --git a/Boids/Assets/Editor/BoidControllerEditor.cs b/Boids/Assets/Editor/BoidControllerEditor.cs index 2e4b6ed..3771560 100644 --- a/Boids/Assets/Editor/BoidControllerEditor.cs +++ b/Boids/Assets/Editor/BoidControllerEditor.cs @@ -20,8 +20,6 @@ public class BoidControllerEditor : UnityEditor.Editor { } // Basic Boid Controller Attributes - controller.boidStartVelocity = - EditorGUILayout.Slider("Start Velocity", controller.boidStartVelocity, 0.01f, 25.0f); EditorGUILayout.MinMaxSlider("Speed Limit", ref controller.minSpeed, ref controller.maxSpeed, 0.01f, 25f); // controller.minSpeed = EditorGUILayout.Slider("Minimum Speed", controller.minSpeed, 0.01f, 25.0f); // controller.maxSpeed = EditorGUILayout.Slider("Maximum Speed", controller.maxSpeed, 0.01f, 25.0f); diff --git a/Boids/Assets/Scripts/Boid.cs b/Boids/Assets/Scripts/Boid.cs index 7fe24f1..4a849f7 100644 --- a/Boids/Assets/Scripts/Boid.cs +++ b/Boids/Assets/Scripts/Boid.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using UnityEditor; using UnityEngine; +using Random = UnityEngine.Random; // Boids are represented by a moving, rotating triangle. // Boids should communicate with sibling Boids via the parental BoidController object @@ -14,14 +15,14 @@ public class Boid : MonoBehaviour { [NonSerialized] public int latestNeighborhoodCount = 0; [NonSerialized] public List latestNeighborhood; [NonSerialized] private BoidController _parent; - [NonSerialized] public bool _isFocused = false; + [NonSerialized] public bool _isFocused; [NonSerialized] private LineRenderer[] _lineRenderers; private void Start() { _parent = transform.parent .GetComponent(); // Parent used to perform physics math without caching - _velocity = Util.GetRandomVelocity(_parent.boidStartVelocity); // Acquire a Velocity Vector with a magnitude + _velocity = Util.GetRandomVelocity(Random.Range(_parent.minSpeed, _parent.maxSpeed)); // Acquire a Velocity Vector with a magnitude _position = transform.position; // Track 2D position separately transform.name = $"Boid {transform.GetSiblingIndex()}"; // Name the Game Object so Boids can be tracked somewhat } diff --git a/Boids/Assets/Scripts/BoidController.cs b/Boids/Assets/Scripts/BoidController.cs index a39e784..01ba1f3 100644 --- a/Boids/Assets/Scripts/BoidController.cs +++ b/Boids/Assets/Scripts/BoidController.cs @@ -11,18 +11,17 @@ public class BoidController : MonoBehaviour { [NonSerialized] public Rect Boundary; // Swarm Attributes - [SerializeField] public int boidCount = 50; - [SerializeField] public float boidGroupRange = 1.0f; - [SerializeField] public float boidStartVelocity = 0.005f; + [SerializeField] public int boidCount = 250; + [SerializeField] public float boidGroupRange = 3.3f; [SerializeField] public float minSpeed; [SerializeField] public float maxSpeed; // Boid Rules are multiplied by this to allow rule 'tweaking' [SerializeField] public float globalBias = 1.0f; - [SerializeField] public float separationBias = 0.05f; - [SerializeField] public float alignmentBias = 0.05f; - [SerializeField] public float cohesionBias = 0.05f; - [SerializeField] public float boundaryBias = 1f; + [SerializeField] public float separationBias = 2f; + [SerializeField] public float alignmentBias = 0.288f; + [SerializeField] public float cohesionBias = 0.3f; + [SerializeField] public float boundaryBias = 1.5f; // Enable/Disable Boid Rules Altogether [SerializeField] public bool enableSeparation = true; @@ -31,12 +30,12 @@ public class BoidController : MonoBehaviour { [SerializeField] public bool enableBoundary = true; [SerializeField] public bool enableFovChecks = true; - [SerializeField] public float boidSeparationRange = 2.3f; // Boid Separation rule's activation distance - [SerializeField] public float boundaryForce = 10f; // The force applied when a Boid hits the boundary + [SerializeField] public float boidSeparationRange = 1.4f; // Boid Separation rule's activation distance + [SerializeField] public float boundaryForce = 50f; // The force applied when a Boid hits the boundary [SerializeField] public bool localFlocks = true; // Calculate Local 'Neighborhood' for flocks? [SerializeField] public bool edgeWrapping = true; // Enforce Edge Wrapping - [SerializeField] public float maxSteerForce = 10f; - [SerializeField] public float boidFov = 220; + [SerializeField] public float maxSteerForce = 400f; + [SerializeField] public float boidFov = 240; public Boid focusedBoid; // A focused Boid has special rendering