RTS camera controller

hey im trying to make a RTS camera controller but cant seem to start.

Can anybody help with it ??

Thx

thx but i was thinking more of the scripting so that i can make my camera move when my cursor gets near the screen border :slight_smile:

sorry for not being clear enough :slight_smile:

C#

    using UnityEngine;

    public class MouseRts : MonoBehaviour
    {
        private const int LevelArea = 100;

        private const int ScrollArea = 25;
        private const int ScrollSpeed = 25;
        private const int DragSpeed = 100;

        private const int ZoomSpeed = 25;
        private const int ZoomMin = 25;
        private const int ZoomMax = 100;

        private const int PanSpeed = 50;
        private const int PanAngleMin = 50;
        private const int PanAngleMax = 80;

        // Update is called once per frame
        void Update()
        {
            // Init camera translation for this frame.
            var translation = Vector3.zero;

            // Zoom in or out
            var zoomDelta = Input.GetAxis("Mouse ScrollWheel")*ZoomSpeed*Time.deltaTime;
            if (zoomDelta!=0)
            {
                translation -= Vector3.up * ZoomSpeed * zoomDelta;
            }

            // Start panning camera if zooming in close to the ground or if just zooming out.
            var pan = camera.transform.eulerAngles.x - zoomDelta * PanSpeed;
            pan = Mathf.Clamp(pan, PanAngleMin, PanAngleMax);
            if (zoomDelta < 0 || camera.transform.position.y < (ZoomMax / 2))
            {
                camera.transform.eulerAngles = new Vector3(pan, 0, 0);
            }

            // Move camera with arrow keys
            translation += new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

            // Move camera with mouse
            if (Input.GetMouseButton(2)) // MMB
            {
                // Hold button and drag camera around
                translation -= new Vector3(Input.GetAxis("Mouse X") * DragSpeed * Time.deltaTime, 0,
                                   Input.GetAxis("Mouse Y") * DragSpeed * Time.deltaTime);
            }
            else
            {
                // Move camera if mouse pointer reaches screen borders
                if (Input.mousePosition.x < ScrollArea)
                {
                    translation += Vector3.right * -ScrollSpeed * Time.deltaTime;
                }

                if (Input.mousePosition.x >= Screen.width - ScrollArea)
                {
                    translation += Vector3.right * ScrollSpeed * Time.deltaTime;
                }

                if (Input.mousePosition.y < ScrollArea)
                {
                    translation += Vector3.forward * -ScrollSpeed * Time.deltaTime;
                }

                if (Input.mousePosition.y > Screen.height - ScrollArea)
                {
                    translation += Vector3.forward * ScrollSpeed * Time.deltaTime;
                }
            }

            // Keep camera within level and zoom area
            var desiredPosition = camera.transform.position + translation;
            if (desiredPosition.x < -LevelArea || LevelArea < desiredPosition.x)
            {
                translation.x = 0;
            }
            if (desiredPosition.y < ZoomMin || ZoomMax < desiredPosition.y)
            {
                translation.y = 0;
            }
            if (desiredPosition.z < -LevelArea || LevelArea < desiredPosition.z)
            {
                translation.z = 0;
            }

            // Finally move camera parallel to world axis
            camera.transform.position += translation;
        }
    }

thx OneManArmy3D :slight_smile: ill look at that :slight_smile:

Bookmark!

I have put this script into the main camera, and It doesn’t do anything :expressionless: I can’t find a readme either.

Edit: It does do something actually. If I scroll, it pitches the camera down, but not back up. :expressionless:

I know this is an old post - but seeing as Unity has been updated so many times since 2011, I thought I would share a tutorial I made for an RTS camera using Unity5. Hope this helps someone!

RTS Camera In Unity5

1 Like

Hi, I am playing around with the script from OneManArmy3D.
I have replaced the LevelArea with 2 variables so I can control the edges for X and Z. This works perfectly fine on the default zoom level. If I zoom out, the camera can see more, so I need to have the borders flexible. How can I achieve this?