2015-07-13 82 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