Как сказал @Zambari, убедитесь, что вы вращаетесь вокруг локальных осей. Но вы также, похоже, сохраняете ориентацию в углах Эйлера rotX, rotY, rotZ
, а затем устанавливаете ее как абсолютное вращение. Это плохо. Вы хотите применить дельта / модификацию к сохраненному кватерниону преобразования:
void Update() {
var yaw = Quaternion.AngleAxis(Input.GetAxis("Yaw"), transform.up);
var pitch = Quaternion.AngleAxis(Input.GetAxis("Pitch"), transform.right);
var roll = Quaternion.AngleAxis(Input.GetAxis("Roll"), transform.forward);
transform.rotation = transform.rotation * yaw * pitch * roll;
}
примечание: порядок умножения в последней строке может быть неправильным.
Сказав все это, если все, что вам нужно, это управлять своим персонажем, попробуйте (углы в градусах):
transform.Rotate(xAngle, yAngle, zAngle, Space.Self);