Как реально ограничить углы? - PullRequest
0 голосов
/ 02 декабря 2018

Персонаж моей игры - кот;он может ходить и прыгать.Проблема в том, что на земле есть склоны и ямы, поэтому кошка иногда переворачивается на спину, например:

Screenshot

Можно ли реально ограничитьуглы поворота?Т.е. от -45 до 45 градусов, поэтому он совместим с физическим движком.

Я нашел решения для установки углов прямо как transform.rotation = desired Rotation, но он создает артефакты с физикой и не выглядит реалистичным, когда объектначал вращаться и внезапно остановился.

UPD: Я попробовал предлагаемое решение из ответов:

private void FixRotation()
{
    var angles = transform.eulerAngles;
    Debug.Log("Limiting angles: " + minAngle + "; " + maxAngle);
    Debug.Log("Rotation Z: " + angles.z);
    angles.z = Mathf.Clamp(angles.z, minAngle, maxAngle);
    transform.eulerAngles = angles;
    Debug.Log("Fixed rotation Z: " + transform.eulerAngles.z);
}

Не работает правильно.Когда кошка будет вращаться дальше, она возвращается обратно, когда мне нужно НО , спрайт начинает очень быстро дрожать.Я что-то делаю?

1 Ответ

0 голосов
/ 02 декабря 2018

Я решил проблему со встряхиванием, используя решение из этого ответа .

private float ClampAngle(float angle, float min, float max)
{
    if (angle < 90 || angle > 270)
    {   
        // if angle in the critic region...
        if (angle > 180)
        {
            angle -= 360;  // convert all angles to -180..+180
        }

        if (max > 180)
        {
            max -= 360;
        }

        if (min > 180)
        {
            min -= 360;
        }
    }

    angle = Mathf.Clamp(angle, min, max);

    if (angle < 0)
    {
        angle += 360;  // if angle negative, convert to 0..360
    }

    return angle;
}

private void FixRotation()
{
    var angles = transform.eulerAngles;
    angles.z = ClampAngle(angles.z, minAngle, maxAngle);
    transform.eulerAngles = angles;
}

Идея решения заключается в том, что нам нужно предотвратить полный поворот игрового объекта, когда его углы равныв критических регионах (более или менее 180)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...