hey im trying to make a RTS camera controller but cant seem to start.
Can anybody help with it ??
Thx
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
sorry for not being clear enough
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 ill look at that
Bookmark!
I have put this script into the main camera, and It doesn’t do anything 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.
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!
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?