private void FixedUpdate() { for (int part_idx = 0; part_idx < m_LJRigidbodies.Count; part_idx++) { Rigidbody ljrigid = m_LJRigidbodies[part_idx]; Vector3 accelerate = -m_ScaledGammas[part_idx] * ljrigid.velocity; Vector3 random_force = new Vector3(m_NormalizedRandom.Generate(), m_NormalizedRandom.Generate(), m_NormalizedRandom.Generate()); accelerate += m_NoiseCoefs[part_idx] * random_force; ljrigid.AddForce(accelerate, ForceMode.Acceleration); } }
// This method generate BaseParticle in system by side effect. internal List <GameObject> GenerateBaseParticles(GameObject original_base_particle, float kb_scaled) { var return_list = new List <GameObject>(); var temperature = SystemTable.Get <TomlTable>("attributes").Get <float>("temperature"); List <TomlTable> particles = SystemTable.Get <List <TomlTable> >("particles"); foreach (TomlTable particle_info in particles) { var position = particle_info.Get <List <float> >("pos"); GameObject new_particle = GameObject.Instantiate(original_base_particle, new Vector3(position[0], position[1], position[2]), original_base_particle.transform.rotation); // initialize particle velocity Rigidbody new_rigid = new_particle.GetComponent <Rigidbody>(); new_rigid.mass = particle_info.Get <float>("m"); if (particle_info.ContainsKey("vel")) { var velocity = particle_info.Get <List <float> >("vel"); new_rigid.velocity = new Vector3(velocity[0], velocity[1], velocity[2]); } else { float sigma = Mathf.Sqrt(kb_scaled * temperature / new_rigid.mass); new_rigid.velocity = new Vector3(Rng.Generate() * sigma, Rng.Generate() * sigma, Rng.Generate() * sigma); } return_list.Add(new_particle); } return(return_list); }