// Use this for initialization void Start() { cdr = new MoveCDR(); cdr.Center = this.transform.position; cdr.TPNormal = Vector3.up; cdr.Radius = Radius; cdr.HalfLen = HalfLen; }
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); } }