示例#1
0
    void FixedPointCSTest_Move()
    {
        F64Vec3 TTT = F64Vec3.RotateY(new F64Vec3(0, 0, 1), new F64(-90));

        Debug.LogError("TTT " + TTT.ToUnityVector3());

        float speed       = 10;
        float turnSpeed   = 90;
        int   deltaTimeMS = 1000;

        Vector3 oldPos = new Vector3(0, 0, 0);
        Vector3 dir    = new Vector3(0, 0, 1);
        float   delta  = speed * deltaTimeMS / 1000;
        Vector3 newPos = oldPos + delta * dir;

        //moveObject.SetPos(moveObject.GetPos() + (float)delta * moveObject.GetDir());
        Debug.LogError("UNITY NEWPOS " + newPos);

        float   angle  = turnSpeed * deltaTimeMS / 1000;
        Vector3 newDir = Quaternion.AngleAxis(angle, Vector3.up) * dir;

        newDir.Normalize();
        Debug.LogError("UNITY NEWDIR " + newDir);

        F64     fspeed     = new F64(speed);
        F64     fdeltaTime = new F64(deltaTimeMS);
        F64     f1000      = F64.F1000;
        F64     fdelta     = fspeed * fdeltaTime / f1000;
        F64Vec3 fOldPos    = F64Vec3.FromUnityVector3(oldPos);
        F64Vec3 fDir       = F64Vec3.FromUnityVector3(dir);
        F64Vec3 fNewPos    = fOldPos + fdelta * fDir;

        Debug.LogError("FIXED NEW POS " + fNewPos.ToUnityVector3());
        F64     fTurnSpeed = new F64(turnSpeed);
        F64     fAngle     = fTurnSpeed * fdeltaTime / f1000;
        F64Quat rot        = F64Quat.FromAxisAngle(F64Vec3.Up, new F64(0));
        F64Quat rotNor     = F64Quat.Normalize(rot);
        F64Vec3 newFdir    = F64Quat.RotateVector(rotNor, new F64Vec3(0, 0, 1));
        F64Vec3 newNfdir   = F64Vec3.Normalize(newFdir);

        Debug.LogError("FIXED NEWDIR " + newNfdir.ToUnityVector3());
    }
 public static Quaternion ToQuaternion(this F64Quat v)
 {
     return(new Quaternion(v.X.Float, v.Y.Float, v.Z.Float, v.W.Float));
 }