首页 文章

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

提问于
浏览
1

我有一小段代码可以使精灵(在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 回答

  • 2

    看来你已经把刚体留下了 Dynamic ,你应该把它设置为 Kinematic .

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

    • 使用 Box Collider 并在刚体的 Constraints 下冻结旋转:
      enter image description here

    • 使用 Sphere Collider (或其他不像方框一样,你可以在播放模式下查看它们) .

    • 将组件拆分为两个游戏对象,父对象和子对象 . 父级将拥有除精灵渲染器和相机脚本之外的所有组件,这些组件将位于子级上 . 此选项最灵活,限制性更强 . 你可以让箱子对撞机没有冻结旋转等 .

    另外,你可以通过简单地使用以下方法来避免使用 LookAt 方法:

    transform.rotation = m_Camera.transform.rotation;
    

    他们有相同的结果 .

相关问题