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);
    }