相机组件返回null

时间:2018-12-11 20:22:50

标签: c# unity3d

我正在尝试禁用“相机”组件以在我的相机之间进行切换。 但是,当我尝试获取GameObject的Camera组件时,它将返回null。

这是我的GameObject:

enter image description here

这是我的代码崩溃的地方:

void respawn(){
    cameraDead.transform.position = new Vector3(player.transform.position.x, cameraDead.transform.position.y, player.transform.position.z);

    cameraDead.GetComponent<Camera>().enabled = true;//It crashes right here
    camera.GetComponent<Camera>().enabled = false;
    player.transform.SetPositionAndRotation(new Vector3(-27f, 0f, -8.35f), Quaternion.Euler(new Vector3(0,90,0)));
    isDead = true;
}

错误消息指出指针返回空值。因此找不到组件。 预先感谢。

1 个答案:

答案 0 :(得分:0)

当禁用组件或游戏对象处于非活动状态时,您无法使用GetComponent来获取它。根据您的代码,似乎首先禁用了CameraDead的Camera组件,然后尝试在启用它时获取它。

您可以通过缓存组件轻松解决此问题。像这样:

  • 首先在场景中同时启用两个相机组件。

    public GameObject cameraDead;
    public GameObject camera;
    private Camera dead_cam;
    private Camera cam;
    
    void Start()
    {
        dead_cam = cameraDead.GetComponent<Camera>();
        cam = camera.GetComponent<Camera>();
        dead_cam.enabled = false;
    }
    
    //....
    
    void respawn(){
        cameraDead.transform.position = new Vector3(player.transform.position.x, cameraDead.transform.position.y, player.transform.position.z);
    
        dead_cam.enabled = true;
        cam.enabled = false;
        player.transform.SetPositionAndRotation(new Vector3(-27f, 0f, -8.35f), Quaternion.Euler(new Vector3(0,90,0)));
        isDead = true;
    }