使刚体从屏幕边缘反弹

时间:2015-07-13 02:25:53

标签: unity3d

我目前正在处理涉及类似泡沫的运动的物体。该物体具有刚体和球体对撞机。

我每隔1-3秒使用success方法让它连续缓慢移动。

现在我想知道当刚刚到达屏幕边缘时,如何使刚体朝相反方向移动(a.k.a反弹)。我已经使用ProductsView方法计算了屏幕边缘。

我想到的一个无效的解决方案是在边缘放置带有对撞机的空游戏对象,但由于我正在为具有不同屏幕分辨率/大小的移动设备构建,因此不能在我的情况下工作。

任何人都知道一个很好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

我不确定我有这个想法。但我认为当我写一个旧的手机游戏时,我遇到了同样的问题。

我有同样的想法,在边缘使用带有盒子对撞机的空游戏对象,但后来我想,这不是响应,所以我写了这段代码:

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));   
    }
}

有了这个,我总是得到屏幕的角落。它并不花哨......但它确实有效。

如果有效的话,现在让我。

答案 1 :(得分:2)

为了获得反射效果,您需要Material。将弹性材料附加到边缘(gameObject)并让物理计算碰撞的反应。

创建物理2D材质并将反弹度设置为某个适当的值,例如0.2

关于您的问题:

  

我想到的一个无效的解决方案是放空游戏   边缘有碰撞器但在我的情况下不起作用的物体   因为我正在为具有不同屏幕的移动设备构建   分辨率/尺寸。

如果您正在使用UI组件,那么处理边界应该不是问题(因为它以不同的分辨率锚定)但如果不是这样的话,您可以创建脚本CameraResizer和枚举{{1 (左,右,上,下)并使用相同的方式Anchor,您可以将空的gameObject(边界)与任何屏幕尺寸对齐,方法是将它附加到gameObject。

希望它有所帮助!