如何设置游戏对象相对于屏幕的速度

how to set gameobject velocity relative to screen

我想知道如何在 C# 中设置游戏对象相对于屏幕的速度?例如,如果游戏对象在屏幕上掉落,即使世界已经移动,它仍然会在屏幕上掉落。

解决方案 1(简单方法)

您可以将对象设置为相机的子对象 - 这样相机的移动会影响对象的移动,因此您应该可以达到想要的效果。

解决方案 2

const float Velocity = 1.0f;
const float DistanceFromCamera = 1.0f;

Vector3 ScreenCoords = new Vector3(0.0f, 0.0f, 0.0f);  

void Update()
{        
    ScreenCoords.x += velocity * Time.deltaTime;
    Vector3 worldCoords = camera.ScreenToWorldPoint(ScreenCoords);
    worldCoords.z = DistanceFromCamera;

    target.position = worldCoords;
}

这会执行以下操作:

  • 在变量 ScreenCoords 中保持对象相对于相机的位置
  • 更新 ScreenCoords(您可以通过指定速度更新或尝试通过 Rigidbody2D.velocity or Rigidbody.velocity
  • 等字段使用物理引擎
  • 将屏幕坐标转换为世界坐标并更新对象位置