using UnityEngine;
using System.Collections;
public class Tilt : MonoBehaviour
{
bool leanLeft = false;
bool leanRight = false;
public Transform myCharacter;
void Update()
{
if (Input.GetKeyDown("q"))
{
doLeanLeft();
}
if (Input.GetKeyDown("e"))
{
doLeanRight();
}
if (Input.GetKeyUp("q"))
{
doLeanBack();
}
if (Input.GetKeyUp("e"))
{
doLeanBack();
}
}
void doLeanLeft()
{
if (leanLeft == false)
{
myCharacter.transform.rotation = Quaternion.Euler(0, 0, 7);
leanLeft = false;
}
}
void doLeanRight()
{
if (leanRight == false)
{
myCharacter.transform.rotation = Quaternion.Euler(0, 0, -7);
leanRight = false;
}
}
void doLeanBack()
{
myCharacter.transform.rotation = Quaternion.Euler(0, 0, 0);
}
}
Try to hang Rigidbody on the camera and set the following parameters:
IsKinematic = true
IsGravity = false
And also lock the x and y rotation
First, “incremental” rotations and “target” rotations need to be treated differently in Unity. An “incremental” rotation would be something like “add 7 degrees to the camera’s current z rotation” while a “target” rotation would be something like “make the camera face the positive z axis”. Your rotationQuaternion.Euler(0, 0, 7) is “incremental”, so you can’t directly set myCharacter.transform.rotation equal to this rotation. You need to “increment” like myCharacter.transform.rotation = Quaternion.Euler(0, 0, 7) * myCharacter.transform.rotation
Second, I would highly recommend switching to an implementation using Quaternion.AngleAxis() or something other than euler angles. If myCharacter has any other rotations applied to it other than leaning left and right (for example, fixing models imported from blender), rotating around euler axes may lead to unexpected results.