我的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;
}
}
答案 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;
}
}
应该从检查员分配 camera1
和camera2
,即拖放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被其他脚本或相机组件销毁,因为您在运行此脚本后添加了相机。我不知道项目中游戏对象和组件的所有脚本和层次结构。