- Home /
Question by
taylom2234 · Mar 31, 2018 at 05:57 PM ·
c#inputinput.getaxis
GetAxisRaw defaulting to -1 instead of 0
I will post my camera script below. The GetInput() method seems to be the cause of my camera constantly going in circles. For some reason the input variables are at -1 when they should be at 0.
using UnityEngine;
using System.Collections;
public class CameraScript : MonoBehaviour
{
public GameObject player;
public GameObject cameraTarget;
public GameObject zPos;
[System.Serializable]
public class PositionSettings
{
public float maxDistance = 6f;
public float minDistance = 4f;
public float defaultCamHeight = 1f;
public float camHeight = 1f;
public float keyVertDistance = 7f;
public float smooth = 10f;
public float lookHeight = 10f;
}
[System.Serializable]
public class OrbitSettings
{
public float hRotateSpeed = 250f;
public float vRotateSpeed = 3f;
}
[System.Serializable]
public class InputSettings
{
public string ORBIT_HORIZONTAL = "OrbitHorizontal";
public string ORBIT_VERTICAL = "OrbitVertical";
}
public PositionSettings position = new PositionSettings();
public OrbitSettings orbit = new OrbitSettings();
public InputSettings input = new InputSettings();
Vector3 targetPos = Vector3.zero;
Vector3 destination = Vector3.zero;
CharacterController charController;
float hOrbitInput;
float vOrbitInput;
public PlayerScript ps;
private GameObject target;
private Transform camPos;
private float distance;
private float orbitDistance;
private float vertDistance;
private string camMode;
private RaycastHit hit;
private float rayRange = 20;
private bool canSeePlayer;
void Start()
{
target= cameraTarget;
}
void Update()
{
//track current distance
distance = Vector3.Distance(transform.position, target.transform.position);
orbitDistance = Vector3.Distance(transform.position, target.transform.position);
vertDistance = Mathf.Abs(transform.position.y - target.transform.position.y);
Follow();
if (Input.GetAxis("Triggers") < 0) { ZTarget(); }
if (Input.GetButtonDown("R3")) { ChangeDistance(); }
}
void Follow()
{
//Orbit
GetInput();
Debug.Log("hOrbit" + hOrbitInput);
Debug.Log("vOrbit" + vOrbitInput);
if (hOrbitInput != 0)
{ HOrbitControl(); }
if (vOrbitInput != 0)
{ VOrbitControl(); }
if (vOrbitInput == 0)
{ position.camHeight = position.defaultCamHeight; }
//Ensure distance and height are within parameters
AdjustDistance();
AdjustHeight();
AvoidObstacles();
LookAt();
}
void HOrbitControl()
{
transform.RotateAround(target.transform.position, Vector3.up, orbit.hRotateSpeed * hOrbitInput * Time.deltaTime);
}
void VOrbitControl()
{
position.camHeight = orbit.vRotateSpeed * vOrbitInput;
}
void AdjustHeight()
{
if (vertDistance < position.keyVertDistance)
{ transform.position = Vector3.Slerp(transform.position, new Vector3(transform.position.x, target.transform.position.y + position.camHeight, transform.position.z), Time.deltaTime * position.smooth); }
FallingFollow();
}
void AdjustDistance()
{
// if the camera is farther than the maxdistance, bring the camera within the acceptable distance range
if (distance > position.maxDistance)
{
transform.position = Vector3.Slerp(transform.position, new Vector3(
target.transform.position.x - (transform.forward.x * position.maxDistance),
target.transform.position.y + position.camHeight,
target.transform.position.z - (transform.forward.z * position.maxDistance)),
Time.deltaTime * position.smooth);
}
// if the camera is closer than the minDistance, push the camera out to be within the acceptable distance range
if (distance < position.minDistance)
{
transform.position = Vector3.Slerp(transform.position, new Vector3(
target.transform.position.x - (transform.forward.x * position.minDistance),
target.transform.position.y + position.camHeight,
target.transform.position.z - (transform.forward.z * position.minDistance)),
Time.deltaTime * position.smooth);
}
}
void ZTarget()
{ transform.position = Vector3.Slerp(transform.position, zPos.transform.position, Time.deltaTime * position.smooth); }
void LookAt()
{ transform.LookAt(Vector3.Slerp(target.transform.position, new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z), Time.deltaTime * position.smooth)); }
void GetInput()
{
hOrbitInput = Input.GetAxisRaw(input.ORBIT_HORIZONTAL);
vOrbitInput = Input.GetAxisRaw(input.ORBIT_VERTICAL);
}
void ChangeDistance()
{
switch (position.maxDistance.ToString())
{
case "6":
position.maxDistance = 10f;
break;
case "10":
position.maxDistance = 6f;
break;
}
}
void AvoidObstacles()
{
if (Physics.Raycast(transform.position, (player.transform.position - transform.position), out hit, rayRange))
{
if(hit.transform.tag != "Player")
{
//move camera to a location where it can see the player
}
}
}
void FallingFollow()
{
if (ps.animator.GetBool("isFalling"))
{
//raise the camera to give a better angle for landing
}
}
}
Comment
175 lines of code for a question about Input.GetAxisRaw?
Your answer
Follow this Question
Related Questions
Game doesn't recognize X-axis input from XBox 360 controller 1 Answer
Input.GetAxis not returning 0 when keyboard is idle 1 Answer
Using Default Input for mobile platform. 0 Answers
Input returns 0 until released and pressed again if held down before start of scene 0 Answers
Multiple Cars not working 1 Answer