Unity3D вращать землю с помощью ускорения дрожит - PullRequest
1 голос
/ 22 апреля 2019

Я пытаюсь свернуть шар, используя гравитацию. Я также пытаюсь вращать землю с помощью акселерометра, но земля вращается, когда она вращается. Я также не могу установить ограничение на вращение оси X.

void Update()
{
    tilt = new Vector3(Input.acceleration.x, Input.acceleration.y, Mathf.Clamp(Input.acceleration.z,-15,15));
    tilt = Quaternion.Euler(90, 0, 90) * tilt; // Change Rotation according to camera view

    if(tilt.x > 0.05f || tilt.x < -0.05f && tilt.x > -6f || tilt.x < 6f)
    {
        transform.localRotation = new Quaternion(-tilt.x, 0, 0, 3);            
    }

    if (tilt.z < -0.1f || tilt.z >0.1f)
    {
        transform.localRotation = new Quaternion(0, 0, -tilt.z, 3);
    }
}

1 Ответ

0 голосов
/ 22 апреля 2019

Посмотрите, поможет ли это. Это простой пример множества способов реализации угловой скорости.

Обратите внимание, что эффект блокировки Гимбела не учитывается в расчетах. Возможно, вы захотите ограничить вращение в определенном диапазоне. Также вам понадобится мертвая зона для дельты, например if(delta < epsilon) delta = 0;.

float speed = 40f;
void Update()
{
    tilt = new Vector3(Input.acceleration.x, Input.acceleration.y, Mathf.Clamp(Input.acceleration.z,-15,15));
    tilt = Quaternion.Euler(90, 0, 90) * tilt; // Change Rotation according to camera view
    if(tilt.x > 0.05f || tilt.x < -0.05f && tilt.x > -6f || tilt.x < 6f)
    {
        var delta = -tilt.x - transform.localRotation.x;
        transform.localRotation += (new Quaternion(delta, 0, 0, 3) * Time.deltaTime * speed);

    }
    if (tilt.z < -0.1f || tilt.z >0.1f)
    {
        var delta = -tilt.z - transform.localRotation.z;
        transform.localRotation += (new Quaternion(0, 0, -tilt.z, 3) * Time.deltaTime * speed);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...