- Home /
if & Quaternion
Hi there, and thanks for your attention. Im (very) new to c# and im trying to write my first script that moves a character. The script activates on a keycode, and when it has a certain y rotation, it will move. Otherwise, it will rotate towards this y rotation.
A part of my script goes like this:
public void move_Left(){ if(transform.rotation == Quaternion(transform.rotation.x,270,transform.rotation.z,transform.rotation.w)){ transform.position = new Vector3(transform.position.x - 5,transform.position.y,transform.position.z); } else { transform.rotation = new Quaternion(0,270,0,transform.rotation.w); } }`The problem is that i get an error that says : "error CS0119: Expression denotes a
type', where a
variable',
value' or
method group' was expected" How can I fix this ?? thanks
Answer by aldonaletto · Sep 23, 2011 at 11:56 PM
The quaternion components x, y and z have nothing to do with the rotation angles around axes x, y and z - you should use transform.eulerAngles instead. Another point: it's better to allow a small error margin to accept the 270 degrees angle; you probably could never rotate the object manually to a precise 270 degrees rotation, and anyway comparing floats hardly produces an equality.
float error = 1.5f; // accept the angle if inside this error margin
public void move_Left(){ float angleY = transform.eulerAngles.y; if (angleY < 0) angleY = 360 + angleY; // y may come as -90 instead of 270 if (Mathf.Abs(angleY - 270) < error){ // accept values inside +/- range transform.position = transform.position + new Vector3(-5, 0, 0); } else { transform.rotation = Quaternion.Euler(0, 270, 0); }
}`
@Cookiemonster wrote:
Sorry for the late reply :) Thanks alot, and I can see why it doesn't have anything to do with Quaternion now. Thanks alot.
How do I close this question ??
Answer by J3-Gaming · Sep 23, 2011 at 11:50 PM
You forgot the new keyword in your if statement.
if (transform.rotation == new Quaternion(transform.rotation.x, 270, transform.rotation.z, transform.rotation.w))