private void GenerateDrawingAffectors(Vector3[] points, float affectorForce, float affectorDistance) { if (AffectorBuffer != null) { AffectorBuffer.Release(); } System.Array.Resize(ref Affectors, NbAffectors + points.Length); var new_affectors = points.Select(p => { var affector = new GPUBoidAffector(); affector.position = p; affector.force = affectorForce; affector.distance = affectorDistance; return(affector); }).ToArray(); System.Array.Copy(new_affectors, 0, Affectors, NbAffectors, new_affectors.Length); if (DrawDrawingAffectors) { foreach (var point in points) { var go = GameObject.CreatePrimitive(PrimitiveType.Sphere); go.transform.localScale = new Vector3(1, 1, 1); go.transform.position = point; } } NbAffectors += points.Length; AffectorBuffer = new ComputeBuffer(NbAffectors, 20); AffectorBuffer.SetData(Affectors); }
private void GenerateAffectors(float affectorForce, float affectorDistance) { var flockPosition = Target.transform.position; if (AffectorBuffer != null) { AffectorBuffer.Release(); } System.Array.Resize(ref Affectors, NbAffectors + NbAffectorsPerRay); var rayDirection = Camera.main.ScreenPointToRay(Input.mousePosition).direction; var rayStep = RayAffectorDistance / NbAffectorsPerRay; var rayPosition = Camera.main.transform.position + rayDirection * Vector3.Distance(Camera.main.transform.position, Target.transform.position); for (int i = NbAffectors; i < NbAffectors + NbAffectorsPerRay; i++) { var affector = new GPUBoidAffector(); affector.position = rayPosition; affector.force = affectorForce; affector.distance = affectorDistance; Affectors[i] = affector; GameObject.CreatePrimitive(PrimitiveType.Sphere).transform.position = rayPosition; rayPosition += rayDirection * rayStep; } NbAffectors += NbAffectorsPerRay; AffectorBuffer = new ComputeBuffer(NbAffectors, 20); AffectorBuffer.SetData(Affectors); }