c# - 如何使物体在Unity中从随机方向直线移动
问题描述
我在 Unity 2D 中有一个球对象,这个球在屏幕上的随机位置产生,我希望它根据它的方向沿“直线”移动,例如,如果它是从左侧移动到右侧,或者它是从顶部它到底部。我不确定是否应该使用 transform.position/addforce/velocity 来完成此操作以及应该使用哪个方向。
以下是我迄今为止尝试过的(我尝试过使用所有方向)
ballRigidBody.AddForce(transform.up * speed);
ballRigidBody.velocity = Vector2.up * speed;
transform.position+=Vector2.up;
解决方案
在 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 在屏幕中间,它将面向该方向。否则,您必须找出屏幕中间的坐标。
推荐阅读
- java - (Android 应用程序)有没有办法在 FirebaseRecyclerOptions 查询的 SnapshotParser 部分中从 Firebase 数据库中检索数据?
- reactjs - 具有动态 ID 的基本 React Route 不呈现组件
- java - Java SE 11 - Java 语言规范中类型转换的新案例
- django - 检查变量是数字 django 模板
- r - 将模拟输出与 R 中的嵌套列表相结合
- ios - 如何快速裁剪collectionview单元格之外的部分图像
- pandas - 过滤掉仅在前一行中包含重复值的行
- python - 无法在 VSCode 中为 LoPy4 板导入 pycom 模块
- linux - ubunto WSL 上的分段错误(核心转储)
- c++ - 在什么情况下我必须使用 std::function?