【问题标题】:How to make an object move straight from random directions in Unity如何使物体在Unity中从随机方向直线移动
【发布时间】:2021-09-07 02:33:46
【问题描述】:

我在 Unity 2D 中有一个球对象,这个球在屏幕上的随机位置生成,我希望它根据它的方向以“直线”移动,例如如果是从左到右,则从上到下。我不确定是否应该使用 transform.position/addforce/velocity 来完成此操作以及应该使用哪个方向。

以下是我到目前为止尝试过的(我尝试过使用所有方向)

ballRigidBody.AddForce(transform.up * speed);

ballRigidBody.velocity = Vector2.up * speed;

transform.position+=Vector2.up;

【问题讨论】:

  • 您的问题到底是什么?您想知道移动 2D 对象的最佳方式吗?您想知道如何将 2D 对象移动到它所面对的方向吗?您是否希望对象始终移动到特定的 xy 位置?请添加更多上下文

标签: c# unity3d


【解决方案1】:

在 Unity3D 中,transform.forward 是您想要前进时的转到变量。
在 Unity2D 中transform.right 是标准。

您可以使用以下代码将球向右移动:

void Update()
{
    GetComponent<Rigidbody2D>().velocity = transform.right * speed;
}

如果您运行此代码,球将始终向红色箭头的方向移动。 您可以通过选择左上角的move tool,然后在编辑器中单击您的球来查看箭头。

如果您想让您的球始终跟随绿色箭头,您必须使用transform.up

transform.righttransform.up 都相对于您的对象使用。 这意味着通过更改对象的 z 旋转,您可以修改它应该进入的方向。

您可以尝试以下代码来查看您的球向右移动并在其 z 轴上缓慢旋转。这将导致球在一个圆圈中移动,因为它仍然沿着红色箭头移动。

void Update()
{

    GetComponent<Rigidbody2D>().velocity = transform.right * speed;

    float speedRotate = 100;
    transform.Rotate(Vector3.forward * speedRotate * Time.deltaTime);
}

当您总是想要将对象向右移动时,无论旋转如何,您都使用Vector3.right 而不是transform.right


从您的其他 cmet 中,我了解到您希望您的球始终面向屏幕中间的方向。您可以使用以下代码在它生成时将其旋转到屏幕中间:

void Start()
{
    transform.right = new Vector3(0, 0, 0) - transform.position;
}

这将使球面向世界中的 0,0,0 位置。如果 0,0,0 在屏幕中间,它将面向该方向。否则,您必须找出屏幕中间的坐标。

【讨论】:

    【解决方案2】:

    我不确定你在问什么,但你可以做 ballRigidbody.velocity = transform.foward*speed,让它朝着当前的方向前进。

    如果您希望在屏幕左侧生成的球仅向右移动,则设置速度,例如 rb.velocity = Vector3.right * speed,以此类推每个方向。

    【讨论】:

      【解决方案3】:

      在这种情况下,您应该首先检查小球生成的位置(上、下、左、右),然后从该位置确定移动方向。如果球在底部生成,则向上的方向应该是Vector3.up

      获得力后,可以使用rigidBody.AddForce(direction * speed);移动小球。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-09
        • 1970-01-01
        相关资源
        最近更新 更多