在b站上看到的@AsiWorld 的unity中高清摄像机截图,一个月前还可以正常截的。目前图1图2是在别人的电脑上重新建立摄像机之后的情况。图3是在自己的电脑上,找不到Monobehaviour。请高人指点一下问题出在哪里了TT 版本是2018.4.3,中途版本没有切换过
这个是打开unity时的报错
更新
这边新建一个script就显示是杂项文件 这种情况下是需要重装unity吗
更新
这边用高版本的2021.3.8尝试运行了一下发现没有任何程序上的报错,但是就是无法截出来图,截图过程程序都在运行,但是就是出不了
该回答引用ChatGPT
1、相机设置问题:请确保相机的设置正确。您可以尝试在新场景中创建一个新相机并将其设置为 High Definition Render Pipeline (HDRP) 相机。您可以在 Unity 的文档中查找如何创建和配置高清晰度相机的指南。
2、代码问题:如果您的脚本中找不到 MonoBehaviour,则可能是因为脚本中缺少一些必要的引用或声明。请确保您的脚本具有正确的 using 语句,并且可以找到所有需要的 Unity 组件。
3、Unity 版本问题:您的 Unity 版本是2018.4.3,这是一个较旧的版本。如果您正在使用 HDRP,则可能需要升级到较新的版本,以便获得更好的性能和稳定性,并且在最新版本中修复了一些错误。
4、显卡驱动问题:如果您遇到截图的问题,则可能与您的显卡驱动有关。请确保您的显卡驱动程序是最新的,并且与您正在使用的 Unity 版本兼容。
参考GPT和自己的思路:首先,从您提供的信息来看,可能有几种可能导致您的问题:
1 Unity版本更新问题:如果您使用的Unity版本比视频作者使用的版本旧,那么某些功能可能已经更改或不再支持。这可能会导致您无法截取高清摄像机截图。
2 代码更改问题:如果您在视频作者使用的代码上进行了更改,则可能会导致功能不再正常工作。请检查您是否更改了任何与高清摄像机截图相关的代码。
3 组件丢失问题:如果您删除了某些组件或游戏对象,则高清摄像机截图可能会失效。确保所有相关组件都存在且已正确设置。
以下是一些您可以尝试的解决方法:
1 检查Unity版本:请确保您使用的Unity版本与视频作者使用的版本相同。如果您使用的是较旧的版本,请尝试升级Unity并查看是否可以解决问题。
2 检查代码更改:如果您更改了代码,请检查更改是否会影响高清摄像机截图。如果是,请撤消更改或恢复到工作状态。
3 检查组件:请确保所有相关组件都存在且已正确设置。如果您删除了某些组件或游戏对象,请尝试重新创建它们。
4 检查Monobehaviour:如果找不到Monobehaviour,请确保您在正确的脚本上进行操作。可能是您在错误的脚本上进行操作,或者该脚本已从游戏对象中删除。
希望这些解决方案能帮助您解决问题。如果问题仍然存在,请提供更多详细信息。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,需要确定使用的High Definition Render Pipeline(HDRP)的版本是否与Unity版本兼容。可以查看HDRP版本和Unity版本的兼容性矩阵,查看它们是否匹配。
其次,需要检查是否已正确安装并配置了HDRP和相关的依赖项。可以尝试重新安装HDRP和相关的依赖项,确保它们被正确配置并在项目中正确使用。
如果仍然无法解决问题,可能需要针对问题进行更深入的调查。可以使用Unity的调试工具来解决问题。可以尝试在代码中添加调试信息,并使用Unity的调试工具进行分析。
以下是一段使用Unity的高清分辨率摄像机截图的示例代码,你可以参考一下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
public class HDScreenshot : MonoBehaviour
{
[SerializeField] private RenderTexture targetTexture; // 需要截图的目标 RenderTexture
private void Start()
{
// 设置 HDRP 的渲染目标为我们需要截图的 RenderTexture
var hdRenderPipeline = (HDRenderPipeline)RenderPipelineManager.currentPipeline;
var hdRenderPipelineAsset = hdRenderPipeline.asset;
hdRenderPipelineAsset.renderScale = 1f;
hdRenderPipelineAsset.renderingSettings.postProcessSettings.bloom.resolution = BloomResolution.Half;
hdRenderPipeline.currentCameraColorBuffer = targetTexture;
hdRenderPipeline.currentCameraDepthBuffer = targetTexture.depthStencilBuffer;
}
private void LateUpdate()
{
// 在 LateUpdate 中进行截图操作
var uiScaleFactor = Screen.dpi / 96;
var uiScreenWidth = Screen.width / uiScaleFactor;
var uiScreenHeight = Screen.height / uiScaleFactor;
var tempRT = RenderTexture.GetTemporary(uiScreenWidth, uiScreenHeight, 24, RenderTextureFormat.ARGB32);
Graphics.Blit(targetTexture, tempRT);
var tex = new Texture2D(uiScreenWidth, uiScreenHeight, TextureFormat.ARGB32, false);
tex.ReadPixels(new Rect(0, 0, uiScreenWidth, uiScreenHeight), 0, 0);
tex.Apply();
// 将截图保存到本地
byte[] bytes = tex.EncodeToPNG();
System.IO.File.WriteAllBytes(Application.dataPath + "/../Screenshot.png", bytes);
// 释放临时 RenderTexture 和 Texture2D 对象
RenderTexture.ReleaseTemporary(tempRT);
Destroy(tex);
}
}
希望以上内容能对你有所帮助,祝你成功解决问题!
如果我的回答解决了您的问题,请采纳!