2015-07-13 119 views
0

我目前正在研究涉及氣泡狀運動的物體。這個物體有一個剛體和一個球體對撞機。使剛體從屏幕邊緣反彈

我每隔1-3秒使用AddForce方法使其持續緩慢地移動。

現在我想知道如何在已經到達屏幕邊緣時使剛體向相反的方向移動(又稱aa反彈)。我已經使用ViewportToWorldPoint方法計算了屏幕邊緣。

我想到的一個無效解決方案是在邊緣放置帶有對撞機的空遊戲對象,但這對我而言並不奏效,因爲我正在爲具有不同屏幕分辨率/尺寸的移動設備進行構建。

任何人都知道這個很好的解決方案?

回答

2

爲了獲得反射效果,您需要Material。附加一個有彈性的材料邊緣(gameObject),並讓物理計算應該是什麼碰撞的反應。

創建物理2D材質並將彈跳設置爲某個適當的值,如0.2

關於你的問題:

,我認爲的一個無效的解決方案是將空遊戲 對象與對撞機的邊緣,但因爲我建立的移動,不會在我的情況 工作具有不同屏幕的設備 分辨率/尺寸。

如果您正在使用的用戶界面組件,然後用邊界處理不應該是一個問題(因爲它有不同的分辨率錨),但如果情況並非如此,你可以創建一個腳本CameraResizer和枚舉Anchor(左工作, Right,Top,Bottom)並使用相同的方法ViewportToWorldPoint可以通過附加gameObject來將空的gameObject(邊界)與任何屏幕大小對齊。

希望它有幫助!

+0

感謝您的回答。當你說'將有彈性的材料粘貼到ViewPort邊緣時,Unity編輯器中是否有ViewPort對象可以訪問? 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