Question by
CrashTheComet · Oct 07, 2017 at 06:47 PM ·
camerarotationfirst-person
problem with first person camera
I have a problem where when I added a line that should have just kept the player model in the same rotation as the camera causes the camera to react based on mouse position instead of mouse movement. So the camera wigs out and spins like crazy if I have the mouse so much as a centimeter from the middle of the screen. There is no script at all here for detecting mouse position.
The player camera is the child of the player model.
this is the first script on the player model.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sc_InputDetect : MonoBehaviour {
public float RotateX;
public float RotateY;
public float MoveZ;
public float MoveX;
void Start () {
}
void Update()
{
RotateX = Input.GetAxis("RotateX");
RotateY = Input.GetAxis("RotateY");
MoveX = Input.GetAxis("MoveX");
MoveZ = Input.GetAxis("MoveZ");
}
}
This is the second script on the player model. also this is where the problem code is.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sc_PlayerManipulation : MonoBehaviour {
public GameObject Camera;
sc_InputDetect InputDetect;
float MoveX;
float MoveZ;
float WalkSpeed = 1f;
void Start () {
Camera = GameObject.Find("PlayerCam");
InputDetect = this.GetComponent<sc_InputDetect>();
}
void Update () {
//adding this line caused the issue. Taking it out solves it, but the player model doesn't rotate.
transform.eulerAngles = new Vector3(0, Camera.transform.eulerAngles.y, 0);
MoveX = InputDetect.MoveX;
MoveZ = InputDetect.MoveZ;
Debug.Log(Camera.transform.eulerAngles.y);
if (MoveX != 0 || MoveZ != 0)
{
Vector3 move = new Vector3(MoveX * WalkSpeed, 0f, MoveZ * WalkSpeed);
transform.Translate(move * Time.deltaTime, Space.Self);
}
}
}
And this is the only script on the camera.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sc_CameraManipulation : MonoBehaviour {
public GameObject PlayerObject;
sc_InputDetect P_Input;
float RotateX;
float RotateY;
float angleX;
float angleY;
Vector3 Rotate;
// Use this for initialization
void Start ()
{
PlayerObject = GameObject.Find("PlayerCap");
P_Input = PlayerObject.GetComponent<sc_InputDetect>();
}
// Update is called once per frame
void Update ()
{
RotateCamera();
Debug.Log(P_Input.RotateY);
}
void RotateCamera ()
{
RotateX = P_Input.RotateX;
RotateY = P_Input.RotateY;
if (RotateX != 0 || RotateY != 0)
{
Rotate = new Vector3(RotateX * -1 , RotateY, 0);
transform.Rotate(Rotate * Time.deltaTime * 10);
angleX = transform.eulerAngles.x;
angleY = transform.eulerAngles.y;
transform.eulerAngles = new Vector3(angleX, angleY, 0);
}
}
}
Comment