2015-07-13 4 views
0

В настоящее время я работаю над объектом, который связан с пузырьковым движением. Этот объект имеет твердотельный и сферический коллайдер.Сделать твердое тело отскоком от края экрана

Я использую метод AddForce каждые 1-3 секунды, чтобы он перемещался непрерывно и медленно.

Теперь я хотел бы знать, как заставить твердое тело двигаться в противоположном направлении (a.k.a отскакивает), когда они уже достигнут края экрана. Я уже вычислил края экрана, используя метод ViewportToWorldPoint.

Одно из неэффективных решений, о которых я думал, состоит в том, чтобы положить пустые игровые объекты с коллайдером по краям, но это не сработает в моем случае, так как я строю для мобильных устройств с разными разрешениями/размерами экрана.

Кто-нибудь знает хорошее решение для этого?

ответ

2

Для того чтобы получить эффект отражения, вам нужно Material. Прикрепите упругий материал к краям (gameObject) и дайте физике вычислить, какова должна быть реакция столкновения.

Создайте физический 2D-материал и установите его значение в некотором подходящем значении 0.2.

Что касается вашего вопроса:

Один неэффективного решения, которое я думал, чтобы положить игру пуста объекты с коллайдером по краям, но это не будет работать в моем случае , так как я строй для мобильных устройств устройства, которые имеют различный экран резолюции/размеры.

Если вы работаете с компонентом пользовательского интерфейса, то имеем дело с границами не должно быть проблемой (так как анкеры с разным разрешением), но если это не так, вы можете создать сценарий CameraResizer и перечисление Anchor (левый, Right, Top, Bottom) и используя тот же способ ViewportToWorldPoint, вы можете выровнять свой пустой объект gameObject (границу) с любым размером экрана, присоединив его к gameObject.

Надеюсь, это поможет!

+0

Спасибо за ответ. Когда вы сказали «Прикрепите искушенный материал к краям ViewPort», есть ли объект ViewPort, доступный в редакторе Unity? Еще новое и выяснение моего пути с Unity извините: P Было бы полезно, если бы это было так, так что мне не придется вручную беспокоиться о размере моих коллизионных ящиков для разных размеров экрана. – aresz

+0

Нет объекта ViewPort.Я имею в виду приложенный материал к gameObject, который используется как граница, и эти границы должны быть выровнены по углам экрана с помощью 'ViewportToWorldPoint'. – NeverHopeless

+0

А я вижу. На секунду я подумал, что есть. Я получаю это сейчас. Я постараюсь, чтобы отскок работал с предложенным методом. Когда я закончу, я обновлю. – aresz

1

Я не уверен, что у меня есть идея. Но я думаю, что у меня была такая же проблема, когда я писал старую мобильную игру.

Я была такая же мысль, которую вы сделали, использовать пустые игровые объекты с коробкой коллайдера по краям, но потом я подумал, что это не реагирует, поэтому я написал этот код:

public class Walls_c : MonoBehaviour { 

    public Transform righttop; 
    public Transform rightbottom; 
    public Transform lefttop; 
    public Transform leftbottom; 

    // Use this for initialization 
    void Start() { 
     righttop.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(1,1,0)); 
     rightbottom.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(1,0,0)); 
     lefttop.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(0,1,0)); 
     leftbottom.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(0,0,0)); 
    } 
} 

С этим, Я всегда получаю углы экрана. Это не фантазия ... но она работает.

Позвольте мне теперь, если это сработает.

+0

Спасибо за ответ. Это помогло определить края экрана, чтобы я мог правильно позиционировать мои пустые игровые объекты вне зависимости от размера экрана. – aresz