首页 > 解决方案 > 如何使物体在Unity中从随机方向直线移动

问题描述

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

以下是我迄今为止尝试过的(我尝试过使用所有方向)

ballRigidBody.AddForce(transform.up * speed);

ballRigidBody.velocity = Vector2.up * speed;

transform.position+=Vector2.up;

标签: c#unity3d

解决方案


在 Unity3Dtransform.forward中,当您想要前进时,它是 go to 变量。
在 Unity2Dtransform.right中是标准。

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

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

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

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

transform.right并且transform.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.


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

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

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


推荐阅读