- Home /
Move Camera only along y and z axis, but not both?
I am trying to make my camera move when you press WASD or Arrow Keys. I can make it move, however, the problem is that the camera is at an angle, so whenever I move it, it goes on both axis, slightly. Is there a way to fix this? My line of code is in the update function:
transform.Translate(new Vector3(Input.GetAxis ("Horizontal"), Input.GetAxis("Vertical"), 0.0f));
Answer by robertbu · Dec 31, 2013 at 07:06 PM
There are a couple of different ways to interpret your question. I'm going to assume you want to move forward along the XZ plane in the direction your are facing, and you want to go up and down in the world 'y' axis. I'm going to assume you want to move smoothly over time, not make immediate jumps. You need to scale your movements by Time.deltaTime, and you probably should introduce a speed variable.
At the top of the file:
var speed = 2.0;
In Update():
float horz = Input.GetAxis ("Horizontal");
float vert = Input.GetAxis("Vertical");
Vector3 v = transform.forward;
v.y = 0;
v.Normalize();
transform.position += v * horz * speed * Time.deltaTime;
transform.position += Vector3.up * vert * Time.deltaTime;
The camera doesn't move. I don't know if it has to do with me coding in C# ins$$anonymous$$d of JavaScript (because you put down JS), or if it is because of my other code interfering. Here is the whole code as of right now:
using UnityEngine;
using System.Collections;
public class cameraController : $$anonymous$$onoBehaviour {
public float dragSpeed;
private Vector3 dragOrigin;
float speed = 2f;
private Quaternion rotateOrigin;
public Transform target;
void Start () {
dragSpeed = PlayerPrefs.GetFloat("dragSpeed", 1f);
}
// Camera movement
void Update () {
CameraDrag();
CameraRotation ();
if(Input.GetAxis ("$$anonymous$$ouse ScrollWheel") < 0) {
if(Camera.main.fieldOfView <= 70) {
Camera.main.fieldOfView += 2f;
}
if(Camera.main.orthographicSize <= 20) {
Camera.main.orthographicSize += 0.5f;
}
}
if(Input.GetAxis("$$anonymous$$ouse ScrollWheel") > 0) {
if(Camera.main.fieldOfView > 20) {
Camera.main.fieldOfView -= 2f;
}
if(Camera.main.orthographicSize >= 1) {
Camera.main.orthographicSize -= 0.5f;
}
}
float horz = Input.GetAxis ("Horizontal");
float vert = Input.GetAxis ("Vertical");
Vector3 v = transform.forward;
v.y = 0;
v.Normalize();
transform.position += v * horz * speed * Time.deltaTime;
transform.position += Vector3.up * vert * Time.deltaTime;
}
void OnDestroy() {
PlayerPrefs.SetFloat("dragSpeed", dragSpeed);
}
void CameraDrag() {
if (Input.Get$$anonymous$$ouseButtonDown(2)) {
dragOrigin = Input.mousePosition;
}
else if(!Input.Get$$anonymous$$ouseButton (2)) {
return;
}
Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - dragOrigin);
Vector3 move = new Vector3(pos.x * dragSpeed, 0, pos.y * dragSpeed);
transform.Translate(move, Space.World);
}
void CameraRotation() {
/*if(Input.Get$$anonymous$$ouseButton (1)) {
float h = dragSpeed * Input.GetAxis ("$$anonymous$$ouse X");
float v = dragSpeed * Input.GetAxis("$$anonymous$$ouse Y");
transform.Rotate(v, h, 0);
rotateOrigin = Quaternion.identity;
}
else if(!Input.Get$$anonymous$$ouseButton (1)){
return;
}
Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - dragOrigin);
Vector3 move = new Vector3(pos.x * dragSpeed, 0, pos.y * dragSpeed);
transform.Rotate (move, Space.World);*/
}
}
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
GameObject trembles when moving with setPosition 2 Answers
Toggle map/Camera [JS] 1 Answer
Switching between one or more cameras in the same scene? 2 Answers