public override void update(GameObject obj) { phyObj po = obj.GetComponent <phyObj>(); Vector3 v = unityFire.getItemVelocity(obj); unityFire.addItemForce(obj, B * po.getq() * v.magnitude, calu.normalVector(this.direction, v).normalized); }
protected override void realUpdate(GameObject obj) { Vector3 pos2 = obj.transform.position; Vector3 dir = pos2 - unityFire.getItemPos(thisObj); double r2 = dir.sqrMagnitude; phyObj po = obj.GetComponent <phyObj>(); double F = (k * thisPo.getq() * po.getq()) / r2; unityFire.addItemForce(obj, (float)F, dir.normalized); }
public static GameObject creatObject(Vector3 v, float m = 1, float q = 0, float e = 1, float size = 0) { GameObject obj = unityFire.addItem("Sphere", v); unityFire.setItemScale(obj, size, size, size); phyObj po = obj.GetComponent <phyObj>(); po.setm(m); po.setq(q); if (e > 1 || e < 0) { //碰撞系数在0-1之间,应判断一下 } po.sete(e); return(obj); }
private void OnCollisionEnter(Collision collision)//只针对了对心碰撞? { GameObject gameobj1 = this.gameObject; phyObj phyobj1 = GetComponent <phyObj>(); GameObject gameobj2 = collision.gameObject; phyObj phyobj2 = GetComponent <phyObj>(); float m1 = phyobj1.getm(); Vector3 v1 = unityFire.getItemVelocity(gameobj1); float m2 = phyobj2.getm(); Vector3 v2 = unityFire.getItemVelocity(gameobj2); float e = phyobj1.gete() > phyobj2.gete() ? phyobj1.gete() : phyobj2.gete(); Vector3 newv1 = (m1 * v1 + m2 * v2 - e * m2 * (v1 - v2)) / (m1 + m2); Vector3 newv2 = (m1 * v1 + m2 * v2 - e * m1 * (v2 - v1)) / (m1 + m2); unityFire.setItemVelocity(gameobj1, 1, newv1); unityFire.setItemVelocity(gameobj2, 1, newv2); }
public override void update(GameObject obj) { phyObj po = obj.GetComponent <phyObj>(); unityFire.addItemForce(obj, po.getm() * this.a, this.direction); }