void Update()
    {
        // Update starting position buffer
        if (cachedInstanceCount != instanceCount || cachedSubMeshIndex != subMeshIndex)
        {
            UpdateBuffers();
        }

        if (Input.GetMouseButtonDown(2))
        {
            Posession(entities[0]);
        }

        //Controll wind with mouse input
        Vector3 windByMousePos = mousePosition.MousePosPoint();

        wind = windByMousePos;

        computeShader.SetFloat("_DeltaTime", Time.deltaTime);
        computeShader.SetVector("_ExternalForce", new Vector3(wind.x, -gravity + wind.z, wind.y));
        computeShader.SetVector("_WorldBoundsMin", worldBounds.min);
        computeShader.SetVector("_WorldBoundsMax", worldBounds.max);
        computeShader.SetFloat("_DragCoefficient", drag);
        computeShader.SetInt("_Count", instanceCount);
        computeShader.SetBuffer(0, "EntityBuffer", entityBuffer);
        computeShader.Dispatch(0, instanceCount / 64 + 1, 1, 1);

        instanceMaterial.SetBuffer("EntityBuffer", entityBuffer);
        instanceMaterial.SetBuffer("EntityPropsBuffer", entityPropsBuffer);

        // Render
        Graphics.DrawMeshInstancedIndirect(instanceMesh, subMeshIndex, instanceMaterial, worldBounds, argsBuffer);
    }