2017-01-23 19 views
0

Пока я знаю свой путь вокруг C# Я новичок в его использовании в разработке игр и Unity. Я хочу сделать мяч отскоком вверх и вниз. Я могу легко заставить мяч двигаться влево и вправо, но когда я меняю свой код с «броска» на «отскок», я получаю следующий результат: (Мяч по диагонали не вверх и вниз) enter image description hereЕдинство: перемещение спрайтов вверх и вниз

но что я хочу:

enter image description here

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

     if (moveDown) { 
      transform.localScale = new Vector3 (-1f, 1f, 1f); 
      GetComponent<Rigidbody2D>().velocity = new Vector2 (speed, GetComponent<Rigidbody2D>().velocity.x); 
     } else { 
      transform.localScale = new Vector3 (1f, 1f, 1f); 
      GetComponent<Rigidbody2D>().velocity = new Vector2 (-speed, GetComponent<Rigidbody2D>().velocity.x); 
     } 
    } 

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

Ps рабочий слева направо код выглядит примерно так:

transform.localScale = new Vector3 (-1f, 1f, 1f); 
      GetComponent<Rigidbody2D>().velocity = new Vector2 (speed, GetComponent<Rigidbody2D>().velocity.y); 
+0

'var vel = GetComponent () .velocity; vel.y * = -1; GetComponent () .velocity = vel; ' – Gusman

+0

Это похоже на то, что мне нужно, но не работает идеально. Мяч медленно дечеты, но каждый раз натыкается на крошечный бит, заставляя его выглядеть так, будто он вибрирует. Мне нужно выяснить, что происходит. – Phil3992

+0

Только вызывать код, когда мяч попадает в верхнюю или нижнюю часть, а не на каждый кадр ... – Gusman

ответ

0

Vector2 состоит из двух компонентов; X и Y. Компонент «X» скорости представляет горизонтальную скорость объекта (влево/вправо). Компонент «Y» скорости представляет собой вертикальную скорость объекта (вверх/вниз).

Для перемещения прямой вверх и вниз, «X», составляющая скорости должна быть «Ноль» (0), в противном случае объект будет продолжать двигаться по горизонтали, так и вертикально, в результате чего по диагонали.

При вызове конструктора для Vector2 вы передаете два параметра; первым параметром является значение «X», а вторым компонентом является значение «Y». В вашем примере кода вы передаете ненулевое значение в первом (X) параметре, что приводит к диагональному перемещению.

+0

Когда я пытаюсь это сделать: transform.localScale = new Vector2 (0, 1f); GetComponent () .velocity = new Vector2 (скорость, GetComponent () .velocity.x); Мой шар просто исчезает – Phil3992

+0

@ Phil3992 thats, потому что вы настраиваете масштаб шарика на 0 ... По существу, масштаб 1 с шариком, который имеет 32x32 пикселя, по-прежнему составляет 32x32 пикселя, поэтому изменение шкалы x на 0 делает мяч 0x32 (размер * шкала), поэтому, если мяч не имеет размера или единиц, он не будет виден, и если у вас есть коллайдер на шаре, у вас также есть предупреждение, жалующееся на это. – Eddge

-1

Вы можете заморозить й позицию, если это помогает.

enter image description here

+0

Это не ответ, это комментарий. – Gusman