- Home /
Quaternion.Euler and Quaternion.Slerp problem when using *= Add!!
I have this problem that I can´t get the Quaternion.Slerp too work as I wan´t! I don´t wan´t to use Quaternion.LookRotation(lookPos); like I did in the next example, both work´s but I want it to rotate around it self. How do I do that without to have to lookat something then it self. Like I sad Rotatet around it self! Hope you understand! Thank´s in advance for answers!
The project looks like this.
A gameObject(player) in the center stands on Rotateobject(ground) platform and then you can touchmove the rotateobject to rotate! On the Rotateobject(ground) platform there is two cubewalls a bit from the player, on the Left and one on right side. On the playergameobject there is two cube´s with trigger attached, one on Left side and one on right side of the player, and I have two of this script on each cube trigger attached with a difference, one with rotateobject.transform.rotation *= Quaternion.Euler(7, 0, 0); and the other has (-7, 0, 0). So when I rotate the Rotateobject(ground) to the right with the touchmove on screen , then left wall hits the cube on left side of the player triggers this script so Rotateobject(ground) moves back a bit, and if I touchmove to left the rightwall triggers and moves Rotateobject(ground) back a bit.
#pragma strict
var rotateobject: Transform;
function OnTriggerEnter (other : Collider) {
if (other.CompareTag ("walls"))
{
rotateobject.transform.rotation *= Quaternion.Euler(7, 0, 0);
print("Lhitwall");
}
}
next example
#pragma strict
var rotateobject : Transform;
var lookrotpoint : Transform;
var damping = 0.2;
function OnTriggerEnter (other : Collider) {
if (other.CompareTag ("walls"))
{
var lookPos = lookrotpoint.position - transform.position;
lookPos.y = 0;
var rotation = Quaternion.LookRotation(lookPos);
rotation *= Quaternion.Euler(10, 0, 0); // this add a 10 degrees x rotation
rotateobject.transform.rotation = Quaternion.Slerp(rotateobject.transform.rotation, rotation, Time.deltaTime * damping);
print("Lhitwall");
}
}
Not sure if this is the intended behaviour or not but using *= will multiply the current value on the left by the value on the right. To add use +=
That's actually not the case with Quaternions. Quaternion multiplication is a non-commutative concatenation (effectively an addition) of Quaternions with each other.
There is no simple "addition" (using plus '+') for two Quaternions.