Hello all!
I recently adapted a JS from a Unity thread into C# for a Amnesia/Outlast style camera lean, and I’ve run into an error.
While it does work, whenever I load into the game, the player is slanted to the left, and remains there - even after I hit the E key multiple times. My script is as follows
public float leanAngle = 35.0f;
public float leanSpeed = 5.0f;
public float leanBackSpeed = 6.0f;
// Use this for initialization
void Start ()
{
LeanBack();
}
// Update is called once per frame
void Update ()
{
if(Input.GetKeyDown(KeyCode.Q))
{
LeanLeft();
}
else if (Input.GetKeyDown(KeyCode.E))
{
LeanRight();
}
else
{
LeanBack();
}
}
void LeanLeft()
{
float currAngle = transform.rotation.eulerAngles.z;
float targetAngle = leanAngle;
if(currAngle > 180.0f)
{
currAngle = 360.0f - currAngle;
}
float angle = Mathf.Lerp(currAngle, targetAngle, leanSpeed * Time.deltaTime);
Quaternion rotAngle = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, angle);
transform.rotation = rotAngle;
}
void LeanRight()
{
float currAngle = transform.rotation.eulerAngles.z;
float targetAngle = leanAngle - 360.0f;
if(currAngle > 180.0f)
{
targetAngle = 360.0f - leanAngle;
}
float angle = Mathf.Lerp(currAngle, targetAngle, leanSpeed * Time.deltaTime);
Quaternion rotAngle = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, angle);
transform.rotation = rotAngle;
}
void LeanBack()
{
float currAngle = transform.rotation.eulerAngles.z;
float targetAngle = leanAngle + 0.0f;
if(currAngle > 180.0f)
{
targetAngle = 360.0f;
}
float angle = Mathf.Lerp(currAngle, targetAngle, leanSpeed * Time.deltaTime);
Quaternion rotAngle = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, angle);
transform.rotation = rotAngle;
}
}
What am I doing wrong here? Any help is appreciated greatly!