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