【问题标题】:Why is my C# camera controller script for Unity only switching between two of the cameras, and not switching back?为什么我的 Unity 的 C# 相机控制器脚本只在两个相机之间切换,而不是切换回来?
【发布时间】:2019-03-30 12:05:52
【问题描述】:

摄像头似乎只能在两个摄像头之间工作,并且不会像预期的那样切换回不同的摄像头。可能会做一些愚蠢的事情,因为我对此很陌生。非常感谢您的帮助。

using UnityEngine;

public class CameraController : MonoBehaviour
{

这是场景中的主摄像机。

public Camera MainCamera;

这些是场景中的其他摄像机。

public Camera FrontCamera;
public Camera LeftCamera;
public Camera RightCamera;
public Camera BackCamera;

功能

void Start()
{

MainCamera = Camera.main;

MainCamera.enabled = true;

FrontCamera.enabled = false;
LeftCamera.enabled = false;
RightCamera.enabled = false;
BackCamera.enabled = false;
}

void Update()
{

if (Input.GetKeyDown(KeyCode.Space))

    if (MainCamera.enabled)
    {
        FrontCamera.enabled = true;
        MainCamera.enabled = false;
        LeftCamera.enabled = false;
        RightCamera.enabled = false;
        BackCamera.enabled = false;

    }

else if (Input.GetKeyDown(KeyCode.Space))

    if (FrontCamera.enabled)
    {

        LeftCamera.enabled = true;
        FrontCamera.enabled = false;
    }

到目前为止,代码按预期工作。

else if (Input.GetKeyDown(KeyCode.Space))
    { 
        if (LeftCamera.enabled)
        {

            RightCamera.enabled = true;
            LeftCamera.enabled = false;
        }
    }
else if (Input.GetKeyDown(KeyCode.Space))
    { 
        if (RightCamera.enabled)
        {
            BackCamera.enabled = true;
            RightCamera.enabled = false;
        }
    }
else if (Input.GetKeyDown(KeyCode.Space))
    {
        if (BackCamera.enabled)
        {
            MainCamera.enabled = true;
            RightCamera.enabled = false;
        }
    }
else if (Input.GetKeyDown(KeyCode.Space))

        if (!MainCamera.enabled) ;
{
        MainCamera.enabled = true;
}
}

}

【问题讨论】:

  • 你好@Tim,你能找出你的问题吗?
  • 实际上正要试一试……最近忙于学校项目。仅按一次空格就很有意义……不知道开关、(CAMERA_STATE)或大小写命令,但似乎非常有用。感谢帮助,如果我有任何进一步的问题会回复。干杯。
  • 查找 C# 的 switch-case 语句。它们内置在语言中。然后,为您的相机状态创建您自己的状态枚举。这些是面向对象编程必不可少的一些基本元素。它们是强大的工具。
  • 会的。再次感谢您的帮助。学习新东西总是好的。

标签: c# unity3d camera


【解决方案1】:

您的制表符和括号令人困惑。此外,嵌套 if、if else-if else-if 的结构令人困惑。你的最后一句话基本上是空的:

else if (Input.GetKeyDown(KeyCode.Space))

    if (!MainCamera.enabled) ;
{
    MainCamera.enabled = true;
}

相反,设置您的代码结构以响应按一次空格键,然后检查您的相机系统的状态:

If (Input.GetKeyDown(KeyCode.Space))
{
    switch (CAMERA_STATE)
    {
        case MAIN:
            MainCamera.enabled = false;
            FrontCamera.enabled = true;
            break;
        case FRONT:
            FrontCamera.enabled = false;
            LeftCamera.enabled = true;
            break;
        case LEFT:
            LeftCamera.enabled = false;
            RightCamera.enabled = true;
            break;
        case RIGHT:
            RightCamera.enabled = false;
            BackCamera.enabled = true;
            break;
        case BACK:
            BackCamera.enabled = false;
            MainCamera.enabled = true;
            break;
        default:
            break;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多