【问题标题】:Make rigid body bounce off the screen edge使刚体从屏幕边缘反弹
【发布时间】:2015-07-13 14:15:09
【问题描述】:

我目前正在研究一个涉及气泡状运动的对象。这个对象有一个刚体和一个球体对撞机。

我每隔 1-3 秒使用一次AddForce 方法,让它连续缓慢地移动。

现在我想知道当刚体到达屏幕边缘时如何让刚体向相反方向移动(也就是反弹)。我已经使用ViewportToWorldPoint 方法计算了屏幕边缘。

我想到的一个无效解决方案是在边缘放置带有碰撞器的空游戏对象,但这不适用于我的情况,因为我正在为具有不同屏幕分辨率/尺寸的移动设备构建。

有人知道这个的好方法吗?

【问题讨论】:

    标签: unity3d


    【解决方案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));   
        }
    }
    

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

    如果可行,现在让我。

    【讨论】:

    • 感谢您的回答。这有助于确定屏幕的边缘,以便无论屏幕大小如何,我都可以正确定位我的空游戏对象。
    【解决方案2】:

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

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

    关于您的问题:

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

    如果您正在使用 UI 组件,那么处理边界应该不是问题(因为它以不同的分辨率锚定)但如果不是这种情况,您可以创建一个脚本 CameraResizer 和一个枚举 Anchor(左, Right, Top, Bottom) 并使用相同的方式ViewportToWorldPoint 您可以将空的游戏对象(边界)与任何屏幕尺寸对齐,方法是将其附加到游戏对象。

    希望对你有帮助!

    【讨论】:

    • 感谢您的回答。当您说Attach a bouncy material to the edges of the ViewPort 时,是否存在可在 Unity 编辑器中访问的 ViewPort 对象?仍然是新的,并且正在用 Unity 找到我的方式,抱歉:P 如果有的话会很有帮助,这样我就不必手动担心不同屏幕尺寸的碰撞框的大小
    • 没有 ViewPort 对象。我的意思是将材质附加到用作边界的游戏对象上,这些边界应该使用ViewportToWorldPoint 与屏幕的角对齐。
    • 啊,我明白了。有一秒钟,我以为有。我现在明白了。我将尝试使用您建议的方法使弹跳工作。完成后我会更新。
    • 得到了我正在寻找的反弹效果。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多