Добавление затем вычитания вектора приводит к вектору, который отличается от начального вектора - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь переместить объект вверх на 60 кадров, а затем переместить его вниз на 60 кадров, поэтому он должен вернуться на прежнее место.Однако, когда я пытался это сделать, этого не произошло.исходное положение объекта было (0,1,2,0), и после того, как я переместил его вверх и вниз, он вернулся в положение (0,1.200001,0).Это сценарий, который я написал для объекта. Объект - это 3d-куб с коллайдером.

private float upCounter = 60;
private float downCounter = 60;
// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{

    if (upCounter > 0)
    {
        transform.position += new Vector3(0, 0.5f, 0);
    }
    else
    {
        if (downCounter > 0)
        {
            transform.position -= new Vector3(0, 0.5f, 0);
        }
        downCounter--;
    }
    upCounter--;
}

Для моего проекта важно, чтобы эта позиция была точной.Как я могу решить это?Все равно спасибо помощникам.

1 Ответ

2 голосов
/ 23 мая 2019

Unity использует поплавки в своих векторах. Если ваш дизайн требует, чтобы вы точно сравнивали поплавки, вам нужно изменить свой дизайн .

Вместо проверки, равны ли два числа с плавающей точкой, используйте Mathf.Approximately(f1,f2)

Это проверяет, являются ли они приблизительно равными, учитывая неточность с плавающей запятой.

Если вам нужно сравнить две Vector3, например, позиции, равные после манипулирования ими, используйте vector1 == vector2

Когда вы сделаете это, Unity будет использовать Approximately для каждого компонента, чтобы проверить, приблизительно ли они равны.

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