首页后端开发ASP.NET利用Unity脚本自定义分辨率实现相机截一张高清截图

利用Unity脚本自定义分辨率实现相机截一张高清截图

时间2024-01-30 23:57:03发布访客分类ASP.NET浏览416
导读:收集整理的这篇文章主要介绍了利用Unity脚本自定义分辨率实现相机截一张高清截图,觉得挺不错的,现在分享给大家,也给大家做个参考。最近做项目的时候需要在游戏里截一张高清截图,研究了一下写成脚本,方便以后使用。脚本可以自定义分辨率,用相机截高...
收集整理的这篇文章主要介绍了利用Unity脚本自定义分辨率实现相机截一张高清截图,觉得挺不错的,现在分享给大家,也给大家做个参考。最近做项目的时候需要在游戏里截一张高清截图,研究了一下写成脚本,方便以后使用。
脚本可以自定义分辨率,用相机截高清截图。可以用代码动态截图,也可以在编辑模式下截图。
注意截图宽高比要正确,宽高比不正确时可能会出问题。

截图效果:

脚本:
CameraCapture.cs

using UnityEngine;
    using System.IO;
    /// summary>
    /// 相机截图/// para>
    ZhangYu 2018-07-06/para>
    /// /summary>
public class CameraCapture : MonoBehaviour {
    // 截图尺寸    public enum CaptureSize {
        CameraSize,        ScreenResolution,        FixedSize    }
        // 目标摄像机    public Camera targetCamera;
        // 截图尺寸    public CaptureSize captureSize = CaptureSize.CameraSize;
        // 像素尺寸    public Vector2 pixelSize;
        // 保存路径    public string savePath = "StreamingAssets/";
        // 文件名称    public string fileName = "cameraCapture.png";
    #if UNITY_EDITOR    PRivate void Reset() {
            targetCamera = GetcomponentCamera>
    ();
            pixelSize = new Vector2(Screen.currentResolution.width, Screen.currentResolution.height);
    }
        #endif    /// summary>
     保存截图 /summary>
        /// param name="camera">
    目标摄像机/param>
    public void saveCapture() {
            Vector2 size = pixelSize;
        if (captureSize == CaptureSize.CameraSize) {
                size = new Vector2(targetCamera.pixelWidth, targetCamera.pixelHeight);
        }
 else if (captureSize == CaptureSize.ScreenResolution) {
                size = new Vector2(Screen.currentResolution.width, Screen.currentResolution.height);
        }
            string path = Application.dataPath + "/" + savePath + fileName;
            saveTexture(path, capture(targetCamera, (int)size.x, (int)size.y));
    }
        /// summary>
     相机截图 /summary>
        /// param name="camera">
    目标相机/param>
    public static Texture2D capture(Camera camera) {
            return capture(camera, Screen.width, Screen.height);
    }
        /// summary>
     相机截图 /summary>
        /// param name="camera">
    目标相机/param>
        /// param name="width">
    宽度/param>
        /// param name="height">
    高度/param>
    public static Texture2D capture(Camera camera, int width, int height) {
            RenderTexture rt = new RenderTexture(width, height, 0);
            rt.depth = 24;
            rt.antiAliasing = 8;
            camera.targetTexture = rt;
            camera.RenderDontReStore();
            RenderTexture.active = rt;
            Texture2D texture = new Texture2D(width, height, TextureFormat.ARGB32, false, true);
            Rect rect = new Rect(0, 0, width, height);
            texture.ReadPixels(rect, 0, 0);
            texture.filterMode = FilterMode.Point;
            texture.Apply();
            camera.targetTexture = null;
            RenderTexture.active = null;
            Destroy(rt);
            return texture;
    }
        /// summary>
     保存贴图 /summary>
        /// param name="path">
    保存路径/param>
        /// param name="texture">
    Texture2D/param>
    public static void saveTexture(string path, Texture2D texture) {
            File.WriteAllBytes(path, texture.EncodeToPNG());
            #if UNITY_EDITOR        Debug.LOG("已保存截图到:" + path);
        #endif    }
}
    

脚本编辑器:

CameraCaptureEditor.cs

using UnityEditor;
    using UnityEngine;
    /// summary>
    /// 相机截图 编辑器/// para>
    ZhangYu 2018-07-06/para>
    /// /summary>
[CanEditMultipleObjects][CustomEditor(tyPEof(CameraCapture))]public class CameraCaptureEditor : Editor {
    public override void OnInspectorgUI() {
            // 属性        CameraCapture script = (CameraCapture)target;
            int selected = (int)script.captureSize;
            // 重绘GUI        EditorGUI.BeginChangeCheck();
            drawProperty("targetCamera", "目标像机");
        string[] options = new string[] {
 "像机尺寸", "屏幕尺寸", "固定尺寸"}
    ;
            selected = EditorGUILayout.Popup("截图尺寸", selected, options, GUILayout.ExpandWidth(true));
            script.captureSize = (CameraCapture.CaptureSize)selected;
        if (script.captureSize == CameraCapture.CaptureSize.FixedSize) {
                drawProperty("pixelSize", "像素尺寸");
                EditorGUILayout.HelpBox("请保持正确的宽高比!\n否则截图区域可能出现错误。", MessageType.Info);
        }
            drawProperty("savePath", "保存路径");
            drawProperty("fileName", "文件名称");
            // 保存截图按钮        bool isPress = GUILayout.Button("保存截图", GUILayout.ExpandWidth(true));
            if (isPress) script.saveCapture();
            if (EditorGUI.EndChangeCheck()) serializedObject.ApplyModifiedProperties();
    }
    private void drawProperty(string property, string label) {
            EditorGUILayout.PropertyField(serializedObject.FindProperty(property), new GUIContent(label), true);
    }
}
    

相关文章:

Vuforia Unity Camera Image Access

在Unity中使用Direct2D

相关视频:

PHP 图片上传教程

以上就是利用Unity脚本自定义分辨率实现相机截一张高清截图的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: 技术解答CSV 文件的一个 .NET 库...下一篇:Unity实现脚本插件[Script Creat...猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: 利用Unity脚本自定义分辨率实现相机截一张高清截图
本文地址: https://pptw.com/jishu/593209.html
JavaScript怎样实现点击出现图片效果 c#之解决百度地图api APP SN校验失败问题(代码实例)

游客 回复需填写必要信息