如何设置游戏对象相对于屏幕的速度
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
等字段使用物理引擎
- 将屏幕坐标转换为世界坐标并更新对象位置
我想知道如何在 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 等字段使用物理引擎
- 将屏幕坐标转换为世界坐标并更新对象位置