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

时间:2018-03-22 21:46:51

标签: c# unity3d camera sprite rigid-bodies

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

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); 
    }
}

此代码确保精灵始终面向摄像机,使其向后倾斜,因为精灵上方的摄像机面朝下45度。当我在精灵上放置一个刚体时,精灵会自己朝着倾斜的方向移动。如果没有附加代码,刚体工作正常。

我怎么能有一个总是面向相机的精灵,并且附有一个刚体?

1 个答案:

答案 0 :(得分:2)

您似乎已将刚体保留为Dynamic,您应将其设为Kinematic

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

  • 使用Box Collider并在刚体的Constraints下冻结旋转: enter image description here
  • 使用Sphere Collider(或其他不像方框一样,你可以在播放模式中查看它们。)
  • 将组件拆分为两个游戏对象,即父级和子级。父级将包含除了精灵渲染器和摄像头脚本之外的所有组件,它们将在子级上。这个选项最灵活,限制性更强。你可以让箱子对撞机没有冻结旋转等。

另一方面,您可以通过简单地使用:

来避免使用LookAt方法
transform.rotation = m_Camera.transform.rotation;

他们有相同的结果。