Unity C#,相机面向精灵和刚体不能一起工作

Unity C#, Camera facing sprite and rigidbody not working together

我有一小段代码可以让精灵(在 3D 世界中)始终面对相机(它必须是 3D space)。

public class CS_CameraFacingBillboard : MonoBehaviour {

    private Camera m_Camera;

    private void Start()
    {
        m_Camera = Camera.main;
    } 

    void Update()
    {
        transform.LookAt(transform.position + m_Camera.transform.rotation * 
Vector3.forward, m_Camera.transform.rotation * Vector3.up); 
    }
}

此代码确保 sprite 始终面向相机,导致它向后倾斜,因为 sprite 上方的相机以 45 度角朝下。当我在精灵上放置一个刚体时,精灵会自行向其倾斜的方向移动。没有附加此代码,刚体工作正常。

我怎样才能让精灵始终面向相机,并附有刚体?

您似乎将刚体设置为 Dynamic,您应该将其设置为 Kinematic

编辑:在您发表评论后,我在 Unity 中检查了自己,可能我已经重新创建了您描述的行为。如果我在精灵上使用 Box Collider 而不锁定其刚体旋转,它也会发生在我身上。 所以你有三种可能的解决方案:

  • 使用 Box Collider 并在刚体的 Constraints 下冻结旋转:
  • 使用 Sphere Collider(或其他与盒子不同的,您可以在播放模式下查看它们)。
  • 将组件拆分为两个游戏对象,一个父对象和一个子对象。父级将拥有所有组件 除了 精灵渲染器和相机脚本,它们将在子级上。此选项最灵活且限制较少。你可以在不冻结旋转等的情况下使用盒子碰撞器

另一件事,你可以避免使用 LookAt 方法,只需使用:

transform.rotation = m_Camera.transform.rotation;

他们有相同的结果。