private void ApplyMagneticForce(MovingChargedAtom mca) { Vector3 newForce = Vector3.zero; foreach (ChargedAtom ca in chargedAtoms) { if (mca == ca) { continue; } float distance = Vector3.Distance(mca.transform.position, ca.gameObject.transform.position); float force = 1000 * mca.charge * ca.charge / Mathf.Pow(distance, 2); Vector3 direction = mca.transform.position - ca.transform.position; direction.Normalize(); newForce += force * direction * cycleInterval; if (float.IsNaN(newForce.x)) { newForce = Vector3.zero; } mca.rb.AddForce(newForce); } }
public IEnumerator Cycle(MovingChargedAtom mca) { bool isFirst = true; while (true) { if (isFirst) { isFirst = false; yield return(new WaitForSeconds(Random.Range(0, 0.01f))); } ApplyMagneticForce(mca); yield return(new WaitForSeconds(cycleInterval)); } }