我有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;
}
}
3条答案
按热度按时间5ssjco0h1#
首先,对于当前Unity3D版本:
属性camera已弃用。请改用GetComponent()。(UnityUpgradable)
如API docs中所述。
另外,如果你需要在摄像机之间切换,一种方法是从inspector中分配它们,然后去
enabled
属性,另一种方法是在scene中找到它(如果你不知道它的确切位置的话,效率很低)。我建议创建一些服务或相机管理器,这将是一个单点更换相机。记住,相机适用于你的所有场景,不只是为某些对象(但他们可以使用剔除只渲染确切的层你想要的)。camera1
和camera2
应从检查器中分配,即将GameObject
和附加的Camera
组件拖放到脚本检查器的字段(第一个摄像机拖放到 * camera1 * 字段,第二个摄像机拖放到 * camera2 * 字段,依此类推)。mtb9vblg2#
关于您的问题,我在Transform的文档中没有看到FindChild函数,我认为您应该使用Find函数:您可以使用以下简单代码来尝试查找问题。
如果你会得到“相机找不到”也许你没有添加相机组件到游戏对象“播放器”或相机组件被其他脚本或相机组件不存在破坏,因为你添加相机后运行此脚本。我不知道所有脚本和游戏对象和组件的层次结构在项目中。
up9lanfz3#
我相信该消息意味着您需要将相机拖放到检查器中。
下一个问题是
正在引用一个相机组件,而不是相机对象。因此,当您尝试:
您将打开音频侦听器组件,并关闭摄像头组件(这将抛出另一条警告消息)。
这将"禁用"摄像机对象(所有组件,包括音频侦听器组件和摄像机组件)