- Home /
 
RTS Camera: Rotate Around Point but then Pan Directions Flip
So Im trying to make an RTS Camera. Ive figured this out before but cant seem to now. Its a regular rts type camera but as the title says when I rotate the panning is mixed up. The panning uses an empty gameobject's forward to tell forward, back, left and right. Since I rotated about it, the game objects forward vector relative to the camera doesnt properly translate.
Heres what I have so far using UnityEngine; using System.Collections;
 public class CameraRTS : MonoBehaviour {
 
     public Transform cameraJoint;
 
     private Vector2 pos; //mouse
     public float panSensitvity = 0.25f; //sensitivity 0 to 1
     public float verticalSpeed = 1;
     public float cameraRotateSpeed = 80f;
     public float cameraDistance = 30f;
     
 
     //zoom stuff
     float ZoomAmount = 0;
     float MaxToClamp = 3;
     float ROTSpeed = 5;
     //attach this to camera, parent it to a gameObject
     // Use this for initialization
     void Start () {
         //transform.position = (0,1,-3.5);
         transform.localPosition = new Vector3 (0f, 1f, -3.5f);
         transform.localRotation = Quaternion.Euler(45f,0f,0f);
     }
     
     // Update is called once per frame
     void Update () {
 
         //get mouse 2d pos on screen
         pos = Camera.main.ScreenToViewportPoint(Input.mousePosition);
 
         //scroll and zoom
         ZoomAmount += Input.GetAxis("Mouse ScrollWheel");
         ZoomAmount = Mathf.Clamp(ZoomAmount, -MaxToClamp, MaxToClamp);
         var translate = Mathf.Min(Mathf.Abs(Input.GetAxis("Mouse ScrollWheel")), MaxToClamp - Mathf.Abs(ZoomAmount));
 
         transform.Translate(0,0,translate * ROTSpeed * Mathf.Sign(Input.GetAxis("Mouse ScrollWheel")));
 
 
         //rotation
         if (Input.GetKey (KeyCode.Mouse2)) {
             //need to lock cursor and make invisible
             if (pos.x >= 0.9f)
             {
                 //rotate left
                 transform.RotateAround(cameraJoint.position, Vector3.up, cameraRotateSpeed * Time.deltaTime);
 
             }
             if (pos.x <= 0.1f){
                 //rotate right
                 transform.RotateAround(cameraJoint.position, Vector3.down, cameraRotateSpeed * Time.deltaTime);
             }
             //pos.x;
 
         } else {
             mouseborder ();
         }
 
     }
 
     void mouseborder(){
         //mouse is in the far right of the screen
         if (pos.x >= 0.9f)
         {
             cameraJoint.transform.Translate(Vector3.right * panSensitvity);
         }
         //mouse is in the far left of the screen
         else if (pos.x <= 0.1f)
         {
             //move left
             cameraJoint.transform.Translate(Vector3.left * panSensitvity);
         }
         //mouse is in the middle of the screen in the horizontal axis
         else
         {
             //dont move in the horizontal axis
         }
         
         //mouse is in the far top of the screen
         if (pos.y >= 0.9f)
         {
             cameraJoint.transform.Translate(Vector3.forward * pos.y * panSensitvity);
 
         }
         //mouse is in the far bottom of the screen
         else if (pos.y <= 0.1f)
         {
             cameraJoint.transform.Translate(Vector3.back * panSensitvity);
         }
         //mouse is in the middle of the screen in the vertical axis
         else
         {
             //dont move in the vertical axis
         }
         
     }
 
 }
 
 
              Answer by adriandevera · Jun 24, 2015 at 08:25 PM
Eh stupid question. The solution is below. Each for the four camera directions accordingly using transform.forward and transform.right.
         if (pos.y >= 0.9f)
         {    //move forward
             directionNew = transform.forward;
             directionNew.y = 0;
             directionNew.Normalize();
 
             transform.Translate(directionNew * panSensitvity * 50 * Time.deltaTime, Space.World);
 
         }
 
              Your answer
 
             Follow this Question
Related Questions
Pan RTS camera controller without changing elevation/zoom 0 Answers
Error about Camera panning. 0 Answers
RTS Camera Zoom w/ Rotation 0 Answers
Camera rotates on wrong axis 2 Answers
Limiting Camera Movement 1 Answer