// Start is called before the first frame update void Start() { //importing section for Electromagnetic Effects cam = Camera.main; cameraMove2 = cam.GetComponent <cameraMove2>(); cubeMove2 = this.GetComponent <cubeMove2>(); cubeMove2pointcharge1 = GameObject.Find("Point_charge").GetComponent <cubeMove2>(); cubeMove2pointcharge2 = GameObject.Find("Point_charge2").GetComponent <cubeMove2>(); //Update the latest positions of Each point source pointchargeposworldframe3 = cubeMove2pointcharge1.objposworldframe3; pointcharge2posworldframe3 = cubeMove2pointcharge2.objposworldframe3; //Electric charge of the point source. q1 = 1.0f; q2 = 0.0f; m1 = 0.0f; m2 = 0.0f; //an Arrow's Position Vector mesured from Each point source in World frame Vector3 r = cubeMove2pointcharge1.Lobject * rR(cubeMove2.objposworldframe3, pointchargeposworldframe3); Vector3 R = cubeMove2pointcharge2.Lobject * rR(cubeMove2.objposworldframe3, pointcharge2posworldframe3); //Player's Position Vector mesured from Each point source in World frame Vector3 rp = cubeMove2pointcharge1.Lobject * rR(cameraMove2.playrposworldframe3, pointchargeposworldframe3); Vector3 Rp = cubeMove2pointcharge2.Lobject * rR(cameraMove2.playrposworldframe3, pointcharge2posworldframe3); //Creating Electromagnetic Tensor for an Arrow's position in world frame Matrix4x4 F1 = cubeMove2pointcharge1.Lobject.inverse * K(field(cubeMove2pointcharge1.Lobject * r, q1), field(cubeMove2pointcharge1.Lobject * r, m1)) * cubeMove2pointcharge1.Lobject.inverse; Matrix4x4 F2 = cubeMove2pointcharge2.Lobject.inverse * K(field(cubeMove2pointcharge1.Lobject * R, q2), field(cubeMove2pointcharge1.Lobject * R, m2)) * cubeMove2pointcharge2.Lobject.inverse; F = Sum(F1, F2); //Creating Electromagnetic Tensor for an Arrow's position in Player's rest frame Matrix4x4 f = cameraMove2.Lplayer * F * cameraMove2.Lplayer; efield = new Vector3(f.m03, f.m13, f.m23); this.transform.localScale = new Vector3(1, efield.magnitude / 20, 1); if (vp(efield, new Vector3(0, 0, 1)) == new Vector3(0, 0, 0)) { Vector3 up1 = vp(efield, new Vector3(0, 1, 0)); // 方向を、回転情報に変換 Quaternion erotation = Quaternion.LookRotation(up1, efield); transform.rotation = erotation; } else { Vector3 up1 = vp(efield, new Vector3(0, 0, 1)); // 方向を、回転情報に変換 Quaternion erotation = Quaternion.LookRotation(up1, efield); transform.rotation = erotation; } //Creating Electromagnetic Tensor for Player's position in world frame Matrix4x4 G1 = cubeMove2pointcharge1.Lobject.inverse * K(field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * rp, q1), field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * rp, m1)) * cubeMove2pointcharge1.Lobject.inverse; Matrix4x4 G2 = cubeMove2pointcharge2.Lobject.inverse * K(field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * Rp, q2), field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * Rp, m2)) * cubeMove2pointcharge2.Lobject.inverse; G = Sum(G1, G2); }
// Start is called before the first frame update void Start() { //importing ArrowDirection for Electromagnetic Effects player = Camera.main; cameraMove2 = player.GetComponent <cameraMove2>(); GeneralRelmetric = metric.GetComponent <GeneralRelmetric>(); // playrposworldframe4 = cameraMove2.playrposworldframe4; playrposworldframe3 = playrposworldframe4; // objposworldframe3 = this.transform.position; objposworldframe4 = objposworldframe3; objposworldframe4.w = -(playrposworldframe3 - objposworldframe3).magnitude; //objvelworldframe3 = objvelworldframe4 = objvelworldframe3; objvelworldframe4.w = 1.0f; //objaccelworldframe3 = objaccelworldframe4 = objaccelworldframe3; objaccelworldframe4.w = 0.0f; // Lplayer = cameraMove2.Lplayer; Lobject = cameraMove2.LTrans(objvelworldframe3); // this.transform.position = Lplayer * objposworldframe4; }
// Update is called once per frame void Update() { //Update the latest positions of Each point source pointchargeposworldframe3 = cubeMove2pointcharge1.objposworldframe3; pointcharge2posworldframe3 = cubeMove2pointcharge2.objposworldframe3; //an Arrow's Position Vector mesured from Each point source in World frame Vector3 r = rR(cubeMove2.objposworldframe3, pointchargeposworldframe3); Vector3 R = rR(cubeMove2.objposworldframe3, pointcharge2posworldframe3); //Player's Position Vector mesured from Each point source in World frame Vector3 rp = rR(cameraMove2.playrposworldframe3, pointchargeposworldframe3); Vector3 Rp = rR(cameraMove2.playrposworldframe3, pointcharge2posworldframe3); //Creating Electromagnetic Tensor for an Arrow's position in world frame Matrix4x4 F1 = cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * K(field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * r, q1), field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * r, 0)) * cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3).inverse; Matrix4x4 F2 = cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * K(field(cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * R, q2), field(cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * R, 0)) * cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3).inverse; F = Sum(F1, F2); //Creating Electromagnetic Tensor for an Arrow's position in Player's rest frame Matrix4x4 f = cameraMove2.Lplayer.inverse * F * cameraMove2.Lplayer; efield = new Vector3(f.m03, f.m13, f.m23); bfield = new Vector3(f.m12, f.m20, f.m01); this.transform.localScale = new Vector3(1, efield.magnitude / 10, 1); if (vp(efield, new Vector3(0, 0, 1)) == new Vector3(0, 0, 0)) { Vector3 up1 = vp(efield, new Vector3(0, 1, 0)); // 方向を、回転情報に変換 Quaternion erotation = Quaternion.LookRotation(up1, efield); transform.rotation = erotation; } else { Vector3 up1 = vp(efield, new Vector3(0, 0, 1)); // 方向を、回転情報に変換 Quaternion erotation = Quaternion.LookRotation(up1, efield); transform.rotation = erotation; } //Creating Electromagnetic Tensor for Player's position in world frame Matrix4x4 G1 = cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * K(field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * rp, q1), field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * rp, 0)) * cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3).inverse; Matrix4x4 G2 = cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * K(field(cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * Rp, q2), field(cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * Rp, 0)) * cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3).inverse; G = Sum(G1, G2); }
// Update is called once per frame void Update() { Lplayer = cameraMove2.Lplayer; objvelworldframe3 += objaccelworldframe3 * Time.deltaTime; objvelworldframe4 = objvelworldframe3; objvelworldframe4.w = Mathf.Sqrt(1f + objvelworldframe3.sqrMagnitude); objposworldframe4 += objvelworldframe4 * Time.deltaTime; Lobject = cameraMove2.LTrans(objvelworldframe3); this.transform.position = Lplayer * objposworldframe4; }