在unity3D中切换相机

时间:2015-12-23 21:59:18

标签: unity3d

我的2D场景中有2个摄像头。我想将播放器相机改为另一个。 但它给了我错误

这是错误:

MissingComponentException: There is no 'Camera' attached to the "player" game object, but a script is trying to access it.

您可能需要将相机添加到游戏对象“播放器”中。或者您的脚本需要在使用之前检查组件是否已连接。 SwitchCamera.Start()(在Assets / scripts / SwitchCamera.cs:10)

这是我的代码:

public Camera camera1;
public Camera camera2;




void Start () {

    //camera2 = GameObject.Find("Player").GetComponentInChildren<Camera>();

    camera1 = transform.FindChild("player").gameObject.camera;



}

void Update()
{
    if (Input.GetKeyDown (KeyCode.C)) {

        camera1.GetComponent<Camera> ().enabled = true;
        //camera2.GetComponent<Camera>().enabled = true;

    }
    }

2 个答案:

答案 0 :(得分:1)

首先,就目前的Unity3D版本而言:

  

物业相机已被弃用。请改用GetComponent()。 (UnityUpgradable)

如API docs中所述。

此外,如果您需要在相机之间切换,一种方法是从检查员分配它们,然后转到enabled属性。 其他方式是在场景中找到它(如果你不知道它的确切位置,则相当无效)。我建议创建一些服务或相机管理器,这将是单点更换相机。请记住,相机适用于您的所有场景,而不适用于特定对象(但他们可以使用剔除来仅渲染您想要的精确图层)。

示例:

public Camera camera1;
public Camera camera2;

public void Update()
{
    if (Input.GetKeyDown(KeyCode.C))
    {
        //Swap enabled state to opposite one provided that only is on at a time
        camera1.enabled = !camera1.enabled;
        camera2.enabled = !camera2.enabled;
    }
}
应该从检查员分配

camera1camera2,即拖放GameObject并将Camera组件附加到脚本检查器的字段(第一个摄像头到 camera1 字段和第二个摄像头到 camera2 字段等。)

答案 1 :(得分:0)

在回答您的问题时,我没有在Transform的文档中看到函数 FindChild 。 我认为你应该使用查找功能: http://docs.unity3d.com/ScriptReference/Transform.Find.html 您可以使用这个简单的代码来尝试查找问题。

void Start () {
    GameObject go = transform.Find("player").gameObject;
    if (go == null){
        print("GameObject not found");
    }else{
        Camera camera1 = go.GetComponent<Camera>();
        if (camera1 == null){
            print("Camera not found");
        }
    }
}

如果您将“未找到相机”,可能您没有将Camera组件添加到GameObject“播放器”或者Camera Component被其他脚本或相机组件销毁,因为您在运行此脚本后添加了相机。我不知道项目中游戏对象和组件的所有脚本和层次结构。