Столкнулся со странным поведением углов при моделировании полета самолета в 2D. Суть в том, что при обычных условиях на Rotation:
Синтаксис:
Используется csharp
public float speed = 2;
public float nitro = 100;
// Use this for initialization
void Start () {
}
void ChangeSpeed(){
if(transform.rotation.x < 90 && transform.rotation.x > 0 ){
if(speed >= 0.1f)
speed -= 0.1f;
}
else {
if(speed < 15)
speed += 0.1f;
}
}
// Update is called once per frame
void Update () {
//inside the Update method
ChangeSpeed();
if(Input.GetKey("right"))
{
var right = Quaternion.Euler(1,0,0);
transform.rotation *= right;
}
if(Input.GetKey("left"))
{
var left = Quaternion.Euler(-1,0,0);
transform.rotation *= left;
}
transform.Translate(0, 0, speed * Time.deltaTime);
}
public float nitro = 100;
// Use this for initialization
void Start () {
}
void ChangeSpeed(){
if(transform.rotation.x < 90 && transform.rotation.x > 0 ){
if(speed >= 0.1f)
speed -= 0.1f;
}
else {
if(speed < 15)
speed += 0.1f;
}
}
// Update is called once per frame
void Update () {
//inside the Update method
ChangeSpeed();
if(Input.GetKey("right"))
{
var right = Quaternion.Euler(1,0,0);
transform.rotation *= right;
}
if(Input.GetKey("left"))
{
var left = Quaternion.Euler(-1,0,0);
transform.rotation *= left;
}
transform.Translate(0, 0, speed * Time.deltaTime);
}
самолет должен ускорятся при крене вниз и при задирании носа терять скорость. Сначала все по плану, но после поворота на 360 градусов в любую сторону условия срабатывают наоборот (т.е. при задирании носа он начинает падать в небо, при крене вниз тормозит). Вращение происходит относительно оси X. На других осях ситуация повторяется с единственным отличием в том, что при этом другие углы начинают изменятся на 90/180/270 градусов произвольно. Были подозрения на gimbal lock, но они не подтвердились.