void Simulation()
{
ComputeShader cs = BoidsCS;
int id = -1;
// スレッドグループの数を求める
int threadGroupSize = Mathf.CeilToInt(MaxObjectNum / SIMULATION_BLOCK_SIZE);
// 操舵力を計算
id = cs.FindKernel("ForceCS"); // カーネルIDを取得
cs.SetInt("_MaxBoidObjectNum", MaxObjectNum);
cs.SetFloat("_CohesionNeighborhoodRadius", CohesionNeighborhoodRadius);
cs.SetFloat("_AlignmentNeighborhoodRadius", AlignmentNeighborhoodRadius);
cs.SetFloat("_SeparateNeighborhoodRadius", SeparateNeighborhoodRadius);
cs.SetFloat("_MaxSpeed", MaxSpeed);
cs.SetFloat("_MaxSteerForce", MaxSteerForce);
cs.SetFloat("_SeparateWeight", SeparateWeight);
cs.SetFloat("_CohesionWeight", CohesionWeight);
cs.SetFloat("_AlignmentWeight", AlignmentWeight);
cs.SetVector("_WallCenter", transform.position);
cs.SetVector("_WallSize", WallSize);
cs.SetFloat("_AvoidWallWeight", AvoidWallWeight);
cs.SetBuffer(id, "_BoidDataBufferRead", _boidDataBuffer);
cs.SetBuffer(id, "_BoidForceBufferWrite", _boidForceBuffer);
cs.Dispatch(id, threadGroupSize, 1, 1); // ComputeShaderを実行
// 操舵力から、速度と位置を計算
id = cs.FindKernel("IntegrateCS"); // カーネルIDを取得
cs.SetFloat("_DeltaTime", Time.deltaTime);
cs.SetBuffer(id, "_BoidForceBufferRead", _boidForceBuffer);
cs.SetBuffer(id, "_BoidDataBufferWrite", _boidDataBuffer);
cs.Dispatch(id, threadGroupSize, 1, 1); // ComputeShaderを実行
}