Почему, если позиция не работает в Unity3D? - PullRequest
0 голосов
/ 22 сентября 2018

У меня проблема с проверкой, находится ли мой игровой объект на позиции, позвольте мне объяснить: я делаю игру с чем-то вроде «Ползунка», например, Unity UI Slider, (Но не используя ползунок, это простодля сравнения), этот слайдер был сделан с GameObjects.Курсор был разработан для автоматического перемещения, и вы нажимаете на экран, когда курсор находится в определенной зоне.Это код курсора:

 private System.Random FirstRnd = new System.Random();
     private int FirstCounter;
     private float Speed = 50f;
     private float AntiSpeed = -50f;
     private int SecondCounter;
     private System.Random SecondRnd = new System.Random();
     private Vector3 StartLVector = new Vector3(-2.05f, -0.55f, 10f);
     private Vector3 StartRVector = new Vector2(2.05f, -0.55f);
     private Vector3 CenterL = new Vector3(-0.02f, 0.55f, 10f);
     private Vector3 CenterR = new Vector3(1.14f, -0.55f, 10f);
     private GameObject Cursor;

     // Use this for initialization
     void Start ()
     {
         Cursor = GameObject.Find("Cursor");
     }
     private void FixedUpdate()
     {
         SecondStarting();
     }
     void Starting()
     {
         FirstCounter = FirstRnd.Next(1, 3);
         if (FirstCounter == 1)
         {
             transform.position = StartLVector;
         }
         else if (FirstCounter == 2)
         {
             transform.position = StartRVector;
         }
     }
     void SecondStarting()
     {
         Debug.Log("Puga");
         if (Cursor.transform.position == StartLVector)
         {
             Cursor.transform.Translate(Speed, 0, 0);
         }
         else if (Cursor.transform.position == StartRVector)
         {
             Cursor.transform.Translate(AntiSpeed, 0, 0);
         }
         else if (Cursor.transform.position == CenterL)
         {
             SecondCounter = SecondRnd.Next(1, 3);
             if (SecondCounter == 1)
             {
                 Cursor.transform.Translate(Speed, 0, 0);
             }
             else if (SecondCounter == 2)
             {
                 Cursor.transform.Translate(AntiSpeed, 0, 0);
             }
         }
         else if (Cursor.transform.position == CenterR)
         {
             SecondCounter = SecondRnd.Next(1, 3);
             if (SecondCounter == 1)
             {
                 Cursor.transform.Translate(Speed, 0, 0);
             }
             else if (SecondCounter == 2)
             {
                 Cursor.transform.Translate(AntiSpeed, 0, 0);
             }
         }
     }
 }

Насколько я вижу, я не обнаружил здесь проблемы.Ты что-то видишь?Я хочу что-то добавить, сообщение «Пуга» да печатает, но, под ним, кажется, ничего не компилируется

1 Ответ

0 голосов
/ 22 сентября 2018

Сравнения по числам с плавающей запятой изначально неточны и часто возвращают ложные значения, даже если они кажутся равными.Вектор 3 состоит из трех чисел с плавающей запятой (xyz).Несмотря на то, что оператор == единицы для вектора 3 сравнивает квадратную величину, у вас все еще есть достаточно большое поле для ошибки.

Альтернативой может быть попытка округлить свойства xyz (или xy для вектора2) до одного или двух десятичных знаков и сравнить их.

System.Math.Round(value, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...