Exemple #1
0
 // Use this for initialization
 void Start()
 {
     cdr          = new MoveCDR();
     cdr.Center   = this.transform.position;
     cdr.TPNormal = Vector3.up;
     cdr.Radius   = Radius;
     cdr.HalfLen  = HalfLen;
 }
Exemple #2
0
    public static void OnGroundMove(MoveCDR cdr)
    {
        string loginfo = "";

        if (MoveLog)
        {
            loginfo = "=================== ground move ====================";
            Debug.Log(loginfo);
            loginfo = string.Format("in:[{0}, {1}, {2}] xoz:[{3}, {4}] vel:[{5}, {6}, {7}] t:{8} tpn:[{9}, {10}, {11}]",
                                    cdr.Center.x, cdr.Center.y, cdr.Center.z,
                                    cdr.VelDirH.x, cdr.VelDirH.z,
                                    cdr.ClipVel.x, cdr.ClipVel.y, cdr.ClipVel.z,
                                    cdr.TimeSec, cdr.TPNormal.x, cdr.TPNormal.y, cdr.TPNormal.z);
            Debug.Log(loginfo);
        }

        mMoveTraceInfo.Start    = cdr.Center;
        mMoveTraceInfo.HalfLen  = cdr.HalfLen;
        mMoveTraceInfo.Radius   = cdr.Radius;
        mMoveTraceInfo.Velocity = cdr.ClipVel; // the last move speed
        mMoveTraceInfo.TimeSec  = cdr.TimeSec;
        mMoveTraceInfo.Slope    = cdr.SlopeThresh;
        mMoveTraceInfo.TPNormal = cdr.TPNormal;
        mMoveTraceInfo.WishDir  = cdr.VelDirH;
        mMoveTraceInfo.WishSpd  = cdr.Speed;

        mMoveTraceInfo.MaxFallSpd = Collision.MAX_FALL_SPEED;

        mMoveTraceInfo.Accel      = Collision.MOVE_ACCELERATION;
        mMoveTraceInfo.Gravity    = cdr.Gravity;
        mMoveTraceInfo.StepHeight = cdr.StepHeight;

        FullGroundMove(mMoveTraceInfo);

        cdr.ClipVel   = mMoveTraceInfo.Velocity;
        cdr.MoveDist  = (mMoveTraceInfo.End - cdr.Center).magnitude;
        cdr.Blocked   = (cdr.MoveDist < DIST_EPSILON);
        cdr.Center    = mMoveTraceInfo.End;
        cdr.TPNormal  = mMoveTraceInfo.TPNormal;
        cdr.ActualVel = mMoveTraceInfo.AbsVelocity;
        cdr.CanStay   = cdr.TPNormal.y >= cdr.SlopeThresh;
        cdr.OnSurface = cdr.TPNormal.sqrMagnitude > DIST_EPSILON;

        if (cdr.Blocked)
        {
            cdr.ClipVel.Set(0.0f, 0.0f, 0.0f);
        }

        if (MoveLog)
        {
            loginfo = string.Format("out:[{0}, {1}, {2}] tpn:[{3}, {4}, {5}] vel:[{6}, {7}, {8}] move:{9} block:{10} stay:{11} surface:{12}",
                                    cdr.Center.x, cdr.Center.y, cdr.Center.z,
                                    cdr.TPNormal.x, cdr.TPNormal.y, cdr.TPNormal.z,
                                    cdr.ClipVel.x, cdr.ClipVel.y, cdr.ClipVel.z,
                                    cdr.MoveDist, cdr.Blocked, cdr.CanStay, cdr.OnSurface);
            Debug.Log(loginfo);
        }
    }