首页 > 解决方案 > 沿 x 轴远离 y 轴的物体随机漂移

问题描述

我正在尝试制作一个简单的老虎机游戏。理想情况下,它就像赌场老虎机的屏幕一样。代码可能不是最干净的,所以我为此道歉。

我希望物体沿着 y 轴移动,直到它们碰到 y 边界。到达这个 y 边界后,它们将返回顶部,即“SpawnPosY”。由于某种原因,我无法弄清楚。每次碰到这个 y 边界时,对象都会从 y 轴沿 x 轴漂移(y 轴右侧的对象会继续向右移动,反之亦然)。

我试图通过添加另一部分代码来解决此问题,该代码将图标移回 x 轴上的位置,但它们一直在漂移(是的,我已经删除了这行代码,但没有运气)

我跟踪了 Icon 在 X 轴上的移动之一,以防万一它有助于获取数据。1 将代表它从一开始的位置,之后的每个数据点都将是卷轴旋转一圈后的 x 轴位置(图标触及 y 边界)。

  1. 0.369
  2. -5.931
  3. -18.533
  4. -43.737
  5. -94.145
  6. -194.961
  7. -396.593

谁能告诉我为什么会这样?

public class DestroyObjects : MonoBehaviour
{
    public GameObject[] iconPrefabs;
    public int iconNum = 0;
    public float SpawnPosY = 12f;
    private float SpawnPosX = 0.369f;
    public float yBoundary = -0.369f;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Vector2 spawnpos = new Vector2(transform.position.x, SpawnPosY);
        Vector2 fixXpos = new Vector2(SpawnPosX, SpawnPosY);

        if (transform.position.y < yBoundary)
        {
            transform.Translate(spawnpos);
            transfrom.Translate(fixXpos);
        }
    }
}

卷轴上的图标图片

标签: c#visual-studiounity3d

解决方案


您最好使用不同的 Translate 函数重载,该函数采用单独的 x、y 和 z 值,以便您可以指定仅在 y 轴上移动。

您还应该在移动时应用 Time.deltaTime 以标准化帧速率


    var speed = 12f;
    transform.Translate(0, speed * Time.deltaTime, 0);

此外,将生成位置的创建移到更新之外,以便只计算一次,而不是每一帧

关于 transform.Translate 的 Unity 文档


推荐阅读