【问题标题】:switching between cameras in unity3D在 unity3D 中切换相机
【发布时间】:2015-12-23 21:59:18
【问题描述】:

我的 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;

    }
    }

【问题讨论】:

  • 请删除注释掉的代码。它只会让人感到困惑。

标签: unity3d


【解决方案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 应该从检查器分配,即拖放 GameObjectCamera 组件附加到脚本检查器的字段(第一个摄像头到 camera1 字段和第二个摄像头到 camera2 字段等等)。

【讨论】:

  • 相机更换,但不更换另一台相机。当我尝试更改时,它说没有相机并再次给我同样的错误
  • 您使用的是我提供的代码吗?它无法抛出您所指的错误,因为您不再使用camera readonly 属性。
  • 是的。确切地说,只有你的代码。我应该解释一下。
  • 我的主摄像头正在跟随角色,然后场景中的另一个摄像头正在瞄准一个谜题。我想点击某个对象并显示谜题。但是这里我们出错了
  • 我使用的是统一 3d 5 版本。有区别吗?
【解决方案2】:

在回答您的问题时,我在 Transform 的文档中没有看到函数 FindChild。 我认为你应该使用 Find 功能: 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");
        }
    }
}

如果你会得到“找不到相机”可能是你没有将相机组件添加到游戏对象“玩家”或者相机组件被其他脚本破坏或相机组件还不存在,因为你在运行这个脚本后添加了相机.我不知道项目中游戏对象和组件的所有脚本和层次结构。

【讨论】:

  • Zak 这是错误 NullReferenceException: Object reference not set to an instance of an object DreemClick.Start () (at Assets/scripts/DreemClick.cs:18)
  • 其实UnityEngine程序集中有UnityEngine.Transform.FindChild()。它不再被记录,因为它在 Unity3D 5.3 中已被弃用,因为它是 Transform.Find() 的重复功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2017-09-12
  • 2014-12-27
相关资源
最近更新 更多