Dan*_*Lip 3 c# unity-game-engine
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteAlways]
public class SkyBox : MonoBehaviour
{
public Material[] skyboxes;
public Camera skyboxCamera;
public float skyboxMoveSpeed = 2f;
private int index = 0;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
SwitchSkybox();
}
if (RenderSettings.skybox == skyboxes[1])
{
RenderSettings.skybox.SetFloat("_Rotation", Time.time * skyboxMoveSpeed);
}
}
public void SwitchSkybox()
{
index++;
if (index == skyboxes.Length)
{
index = 0;
}
RenderSettings.skybox = skyboxes[index];
if (RenderSettings.skybox == skyboxes[1])
{
skyboxCamera.enabled = true;
Camera.current.enabled = false;
Time.timeScale = 1.0f;
}
else
{
skyboxCamera.enabled = false;
Camera.current.enabled = true;
Time.timeScale = 0.0f;
}
}
}
Run Code Online (Sandbox Code Playgroud)
该脚本在默认天空盒和我的天空盒之间切换,还在当前活动相机和天空盒相机之间切换。
但是当我按下转义键时,它会在编辑器中的第 46 行抛出 null 异常:
Camera.current.enabled = false;
Run Code Online (Sandbox Code Playgroud)
Camera的电流为null
我想做到这一点,当我按下退出键时,它将切换到我的天空盒和天空盒相机,并且还会暂停游戏(稍后我将在游戏暂停时制作一个主菜单)。
这是Camera.current来自手册的。
我们当前用来渲染的相机。
另外值得注意的是 Ruzihm 的评论。
Unity 引擎通常会分配一个已经实例化的实例
Camera到Camera.current
所以,从你的脚本中,我看到两个问题。与此问题直接相关的问题仅在编辑器模式下发生,我将从该问题开始。
在编辑器中工作时,Camera.current不仅仅是您自己的应用程序的相机,还可以是任何相机。它甚至可以指编辑器的场景视图相机。
在最后一种情况下,如果您的场景视图未聚焦(即当您聚焦于 时Game Window)Camera.current将为空。
当您尝试从 切换回来时skyboxCamera,您的Camera.current相机将是相同的skyboxCamera,而不是您的默认相机。因此您将无法检索以前的相机。
不要使用Camera.current,而是将所有相机存储在脚本中(此解决方案的性能也更好,因为 和Camera.current都不Camera.Main是高性能脚本)。
在您的情况下,您需要将这段代码添加到脚本中并使用该EnableSkyBoxCamera方法。
public Camera defaultCamera;
public Camera skyBoxCamera;
private Camera _currentCamera;
public void EnableSkyBoxCamera(bool enableSkyBox)
{
defaultCamera.enabled = !enableSkyBox;
skyBoxCamera.enabled = !enableSkyBox;
if (enableSkyBox) _currentCamera = skyBoxCamera;
else _currentCamera = defaultCamera;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8507 次 |
| 最近记录: |