在unity3D中的摄像机之间切换

kr98yfug  于 2023-01-02  发布在  其他
关注(0)|答案(3)|浏览(991)

我有2摄像头在我的2D场景。我想改变播放器摄像头到另一个。但它给我错误
下面是错误:

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

您可能需要添加一个摄像头到游戏对象"player"。或者您的脚本需要在使用之前检查组件是否已连接。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;

    }
    }
5ssjco0h

5ssjco0h1#

首先,对于当前Unity3D版本:
属性camera已弃用。请改用GetComponent()。(UnityUpgradable)
如API docs中所述。
另外,如果你需要在摄像机之间切换,一种方法是从inspector中分配它们,然后去enabled属性,另一种方法是在scene中找到它(如果你不知道它的确切位置的话,效率很低)。我建议创建一些服务或相机管理器,这将是一个单点更换相机。记住,相机适用于你的所有场景,不只是为某些对象(但他们可以使用剔除只渲染确切的层你想要的)。

    • 示例:**
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 * 字段,依此类推)。

mtb9vblg

mtb9vblg2#

关于您的问题,我在Transform的文档中没有看到FindChild函数,我认为您应该使用Find函数:您可以使用以下简单代码来尝试查找问题。

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

如果你会得到“相机找不到”也许你没有添加相机组件到游戏对象“播放器”或相机组件被其他脚本或相机组件不存在破坏,因为你添加相机后运行此脚本。我不知道所有脚本和游戏对象和组件的层次结构在项目中。

up9lanfz

up9lanfz3#

我相信该消息意味着您需要将相机拖放到检查器中。
下一个问题是

public Camera cam1;

正在引用一个相机组件,而不是相机对象。因此,当您尝试:

cam1.enabled = false;

您将打开音频侦听器组件,并关闭摄像头组件(这将抛出另一条警告消息)。

    • 解决方案:**
public GameObject cam1;

cam1.SetActive(false);

这将"禁用"摄像机对象(所有组件,包括音频侦听器组件和摄像机组件)

相关问题