- Home /
How can I create a toggle between an Unlocked and Locked camera?
I'm trying to create a MOBA or RTS style camera system and want to be able to switch between a camera that follows my character with its movement, and one that is "unlocked" from the player so it stops following it and I can bring my mouse to the edges of the screen to move the camera.
I have the code for each one, but can't figure out a way to do something along the lines of: Press Y to lock on to the character and U to unlock for example. Or press the same button twice to toggle.
Here is my Locked code:
public GameObject player;
private Vector3 offset;
// Use this for initialization
void Start () {
offset = transform.position - player.transform.position;
}
// Update is called once per frame
void Update () {
transform.position = player.transform.position + offset;
}
And here is my Unlocked code:
private Vector3 desiredPosition;
public float scrollZone = 5;
public float scrollSpeed = 20;
public float xMax = 18;
public float xMin = 0;
public float zMax = 8;
public float zMin = -8;
// Use this for initialization
void Start () {
desiredPosition = transform.position;
}
// Update is called once per frame
void Update () {
float x = 0;
float y = 0;
float z = 0;
float speed = scrollSpeed * Time.deltaTime;
if (Input.mousePosition.x < scrollZone)
x -= speed;
else if (Input.mousePosition.x > Screen.width - scrollZone)
x += speed;
if (Input.mousePosition.y < scrollZone)
z -= speed;
else if (Input.mousePosition.y > Screen.height - scrollZone)
z += speed;
Vector3 move = new Vector3 (x, y, z) + desiredPosition;
move.x = Mathf.Clamp (move.x, xMin, xMax);
move.z = Mathf.Clamp (move.z, zMin, zMax);
desiredPosition = move;
transform.position = Vector3.Lerp (transform.position, desiredPosition, 0.2f);
}
Currently I am using them together by starting the game unlocked and holding the space bar to enable the lock. Like this:
public GameObject player;
private Vector3 offset;
private Vector3 desiredPosition;
public float scrollZone = 5;
public float scrollSpeed = 20;
public float xMax = 18;
public float xMin = 0;
public float zMax = 8;
public float zMin = -8;
// Use this for initialization
void Start () {
offset = transform.position - player.transform.position;
desiredPosition = transform.position;
}
// Update is called once per frame
void Update () {
float x = 0;
float y = 0;
float z = 0;
if (Input.GetKey (KeyCode.Space))
{
transform.position = player.transform.position + offset;
} else if (Input.GetKeyUp (KeyCode.Space))
{
desiredPosition = player.transform.position + offset;
}
if (!Input.GetKey (KeyCode.Space))
{
float speed = scrollSpeed * Time.deltaTime;
if (Input.mousePosition.x < scrollZone)
x -= speed;
else if (Input.mousePosition.x > Screen.width - scrollZone)
x += speed;
if (Input.mousePosition.y < scrollZone)
z -= speed;
else if (Input.mousePosition.y > Screen.height - scrollZone)
z += speed;
Vector3 move = new Vector3 (x, y, z) + desiredPosition;
move.x = Mathf.Clamp (move.x, xMin, xMax);
move.z = Mathf.Clamp (move.z, zMin, zMax);
desiredPosition = move;
transform.position = Vector3.Lerp (transform.position, desiredPosition, 0.2f);
}
}
Any help or suggestions are very appreciated(:
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Toggling between skyboxes/lighting with a button 1 Answer
Toggling camera with one key,Toggle Camera with one key? 1 Answer
Toggle between scripts with a script? 2 Answers