缩放精灵的位置始终相同 - Unity(我做错了什么?)

Position for scaled sprites is always the same - Unity (What Am I doing wrong?)

首先,我是 Unity 的新手,显然我做错了什么,但我不知道是什么。

看看下面的图片。一共有三个球。最大的是原始尺寸(进口),另外两个是缩放的。

我写了一个代码,给这些球一个朝向相机右边缘的线性力。相机尺寸为 10(单向 5)。当它到达边缘时,它应该弹回左相机边缘。它有效,但只有原始球在到达边缘时会反弹(其他球也会同时反弹,但它们不应该,因为它们还没有到达边缘)。

所有的球都有相同的位置,但有两个球被缩放并从 "the air - check the image") 反弹。

改变方向的代码在更新函数中。它看起来像这样:

if (rigidBody.transform.position.x > 5)
        {

            rigidBody.AddForce(new Vector2(-60,0));


        }

感谢所有帮助。

我看到的问题是您的代码只检查使球反弹的位置。该位置 可能 在图像的中心测量(检查一下!),因此您必须考虑每个球的宽度 - 实际上,从中心开始,宽度的一半.

要检查图像的位置加上半宽是否已达到限制,您可以使用 renderer.bounds.size 如:

if ((transform.position.x + renderer.bounds.size.x/2) > 5)
    {
        //change directions
        //do something else...
    }

换句话说,球的尺寸越小,x位置就越需要增长到极限,然后你让它们反弹。

不过,我强烈建议采用不同的方法来防止对所有内容进行 硬编码。假设你改变了你的相机尺寸,你将不得不再次重写一切! 我会在相机限制的两侧放置碰撞体,当你的球与它们碰撞时,设置一个 OnCollisionEnter 函数,使它们改变方向。这与你的问题有点偏离,所以我会把它留在那里。 祝你好运!