国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity中生成相機(jī)照片并保存到本地的詳細(xì)教程

這篇具有很好參考價值的文章主要介紹了Unity中生成相機(jī)照片并保存到本地的詳細(xì)教程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


前言

在游戲和應(yīng)用程序開發(fā)中,有時候需要通過代碼在Unity中使用相機(jī)捕捉當(dāng)前場景或特定視角的照片,并將其保存到本地。本教程將演示如何通過C#代碼實(shí)現(xiàn)這一功能。


一、代碼基本結(jié)構(gòu)

 /// <summary>
    /// 生成相機(jī)照片并保存
    /// </summary>
    /// <param name="photographyCamera">相機(jī)</param>
    /// <param name="width">圖像寬度</param>
    /// <param name="height">圖像高度</param>
    /// <param name="path">保存路徑</param>
    /// <param name="imageName">保存圖片名字</param>
    public void CreateCameraCaptureAndSaveLocal(Camera photographyCamera,int width,int height, string path, string imageName){
        // 銷毀之前的 RenderTexture 和 Texture2D
        if (photographyCamera.targetTexture != null){
            RenderTexture.ReleaseTemporary(photographyCamera.targetTexture);
            photographyCamera.targetTexture = null;
            RenderTexture.active = null;
        }

        // 創(chuàng)建 RenderTexture
        RenderTexture rt = new RenderTexture(width, height, 16, RenderTextureFormat.ARGB32);
        photographyCamera.targetTexture = rt;
        GL.Clear(true, true, Color.clear); // 清除顏色和深度緩沖區(qū)
        photographyCamera.Render();
        RenderTexture.active = rt;

        // 創(chuàng)建 Texture2D 并讀取圖像數(shù)據(jù)
        Texture2D image = new Texture2D(width, height, TextureFormat.ARGB32, false);
        image.ReadPixels(new Rect(0, 0, width, height), 0, 0);
        image.Apply();

        // 重要:將 targetTexture 設(shè)置為 null,以便相機(jī)繼續(xù)渲染到主屏幕
        photographyCamera.targetTexture = null;
        RenderTexture.active = null;

        // 檢查保存路徑是否為空或無效
        if (string.IsNullOrEmpty(path)){
            Debug.LogError("Invalid save path.");
            return;
        }

        // 如果文件夾不存在,則創(chuàng)建文件夾
        if (!Directory.Exists(path)){
            Directory.CreateDirectory(path);
        }

        // 保存圖像到本地文件夾

        byte[] bytes = image.EncodeToJPG();
        if (bytes != null){
            string savePath = Path.Combine(path, imageName + ".jpg");

            try{
                File.WriteAllBytes(savePath, bytes);
                Debug.Log("Image saved successfully: " + savePath);
            }
            catch (Exception e){
                Debug.LogError("Error saving image: " + e.Message);
            }
        }
        else{
            Debug.LogError("Failed to encode image to JPG.");
        }
    }

二、使用步驟

1.函數(shù)定義

/// <summary>
/// 生成相機(jī)照片并保存
/// </summary>
/// <param name="photographyCamera">相機(jī)</param>
/// <param name="width">圖像寬度</param>
/// <param name="height">圖像高度</param>
/// <param name="path">保存路徑</param>
/// <param name="imageName">保存圖片名字</param>
public void CreateCameraCaptureAndSaveLocal(Camera photographyCamera, int width, int height, string path, string imageName){

此函數(shù)的目標(biāo)是使用給定的相機(jī)(photographyCamera)生成圖像,并將圖像保存到指定路徑。函數(shù)有五個參數(shù),分別是相機(jī)、圖像寬度、圖像高度、保存路徑和保存圖片的名字

2.銷毀之前的 RenderTexture 和 Texture2D

// 銷毀之前的 RenderTexture 和 Texture2D
if (photographyCamera.targetTexture != null){
    RenderTexture.ReleaseTemporary(photographyCamera.targetTexture);
    photographyCamera.targetTexture = null;
    RenderTexture.active = null;
}

此段代碼確保在生成新圖像前,釋放之前的渲染紋理和2D紋理,以防止內(nèi)存泄漏。

3.創(chuàng)建 RenderTexture

// 創(chuàng)建 RenderTexture
RenderTexture rt = new RenderTexture(width, height, 16, RenderTextureFormat.ARGB32);
photographyCamera.targetTexture = rt;
GL.Clear(true, true, Color.clear); // 清除顏色和深度緩沖區(qū),防止圖像疊加
photographyCamera.Render();
RenderTexture.active = rt;

在這里,我們創(chuàng)建了一個新的RenderTexture(rt),用于保存相機(jī)渲染的圖像。相機(jī)的目標(biāo)渲染紋理被設(shè)置為這個新創(chuàng)建的紋理,然后相機(jī)被渲染,將圖像繪制到rt上。

4.創(chuàng)建 Texture2D 并讀取圖像數(shù)據(jù)

// 創(chuàng)建 Texture2D 并讀取圖像數(shù)據(jù)
Texture2D image = new Texture2D(width, height, TextureFormat.ARGB32, false);
image.ReadPixels(new Rect(0, 0, width, height), 0, 0);
image.Apply();


在這一步,我們創(chuàng)建了一個新的Texture2D(image),并使用ReadPixels方法從RenderTexture中讀取像素數(shù)據(jù)。Apply方法確保紋理被正確應(yīng)用。

5.重要步驟:設(shè)置 targetTexture 為 null

// 重要:將 targetTexture 設(shè)置為 null,以便相機(jī)繼續(xù)渲染到主屏幕
photographyCamera.targetTexture = null;
RenderTexture.active = null;


這一步非常重要,因?yàn)樗鼘⑾鄼C(jī)的目標(biāo)渲染紋理設(shè)置為null,以確保相機(jī)繼續(xù)在主屏幕上渲染。這是在生成圖像后必須執(zhí)行的步驟。

6.檢查保存路徑是否有效

// 檢查保存路徑是否為空或無效
if (string.IsNullOrEmpty(path)){
    Debug.LogError("Invalid save path.");
    return;
}

// 如果文件夾不存在,則創(chuàng)建文件夾
if (!Directory.Exists(path)){
    Directory.CreateDirectory(path);
}

在這里,我們檢查用戶提供的保存路徑是否為空或無效。如果路徑無效,將打印錯誤消息并提前返回,避免后續(xù)操作導(dǎo)致錯誤。
如果保存路徑對應(yīng)的文件夾不存在,我們會創(chuàng)建這個文件夾。這樣可以確保保存圖像的目標(biāo)路徑是有效的。

7.保存圖像到本地文件夾

// 保存圖像到本地文件夾
byte[] bytes = image.EncodeToJPG();
if (bytes != null){
    string savePath = Path.Combine(path, imageName + ".jpg");

    try{
        File.WriteAllBytes(savePath, bytes);
        Debug.Log("Image saved successfully: " + savePath);
    }
    catch (Exception e){
        Debug.LogError("Error saving image: " + e.Message);
    }

    // 保存文件路徑到特定鍵值
    _rc.WriteKey("takingPhotosPath", savePath);
}
else{
    Debug.LogError("Failed to encode image to JPG.");
}


在這里,我們將Texture2D中的圖像數(shù)據(jù)編碼為JPG格式的字節(jié)數(shù)組,并將其寫入指定路徑的文件中。如果保存成功,將打印成功消息并將文件路徑保存到特定的鍵值。如果保存失敗,將打印錯誤消息。


總結(jié)

通過這個函數(shù),你可以在游戲開發(fā)中輕松實(shí)現(xiàn)相機(jī)捕捉和圖像保存的功能,方便用于創(chuàng)建截圖、快照等場景。文章來源地址http://www.zghlxwxcb.cn/news/detail-801593.html

到了這里,關(guān)于Unity中生成相機(jī)照片并保存到本地的詳細(xì)教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【python】爬取斗魚直播照片保存到本地目錄【附源碼+文末免費(fèi)送書】

    【python】爬取斗魚直播照片保存到本地目錄【附源碼+文末免費(fèi)送書】

    英杰社區(qū) https://bbs.csdn.net/topics/617804998 ??? 這篇博客將介紹如何使用Python編寫一個爬蟲程序,從斗魚直播網(wǎng)站上獲取圖片信息并保存到本地。我們將使用 request s 模塊發(fā)送HTTP請求和接收響應(yīng),以及 os 模塊處理文件和目錄操作。 ??????? 如果出現(xiàn)模塊報錯 ??????? 進(jìn)入控

    2024年02月04日
    瀏覽(17)
  • Unity3D相機(jī)圍繞物體自由旋轉(zhuǎn)

    Unity3D相機(jī)圍繞物體自由旋轉(zhuǎn)

    寫了一個相機(jī)圍繞物體360°自由旋轉(zhuǎn)的腳本,比較實(shí)用,分享出來給大家使用,配置如下: Hierarchy界面 ?LookPovit:為物體Auto Aircraft的中心空對象; AroundPovit:用于相機(jī)的空對象,作為父類,主要作用是為了保持與被觀察物體的位置一致,可防止Auto Aircraft出現(xiàn)抖動而影響相機(jī)

    2024年02月11日
    瀏覽(100)
  • 【unity3D】如何修改相機(jī)的默認(rèn)視角

    【unity3D】如何修改相機(jī)的默認(rèn)視角

    ?? 未來的游戲開發(fā)程序媛,現(xiàn)在的努力學(xué)習(xí)菜雞 ??本專欄是我關(guān)于游戲開發(fā)的學(xué)習(xí)筆記 ??本篇是unity的如何修改相機(jī)的默認(rèn)視角 Game窗口運(yùn)行的話視角是這樣的: 此時Scene窗口的視角是這樣的,可以觀察到人物變化,但是我現(xiàn)在需要游戲運(yùn)行起來從Game窗口進(jìn)行操作來觀察

    2024年02月09日
    瀏覽(19)
  • 【Unity3d】【相機(jī)】透視相機(jī)UI轉(zhuǎn)換(3DUI+保持屏幕比例)

    0. 基礎(chǔ)知識點(diǎn) 正交相機(jī) : 正交相機(jī)的的orthographicSize ,是 二分之一的屏幕高度,即 orthographicSize = H/2。 透視相機(jī) : 相機(jī)的aspect為相機(jī)的視口的寬高比: aspect = W/H 即: W = H * aspect 透視相機(jī)的屏幕高度H 隨著相機(jī)的中心距離和fov變化。公式為: H = distance * tan(fov*0.5) * 2 相機(jī)視

    2024年02月04日
    瀏覽(29)
  • uniapp制作水印相機(jī)給圖片添加水印并且保存圖片至本地

    uniapp制作水印相機(jī)給圖片添加水印并且保存圖片至本地

    文件主要分為兩大類: 1.代碼包文件:代碼包文件指的是在項(xiàng)目目錄中添加的文件。 2.本地文件:通過調(diào)用接口本地產(chǎn)生,或通過網(wǎng)絡(luò)下載下來,存儲到本地的文件。 其中本地文件又分為三種: 1.本地臨時文件:臨時產(chǎn)生,隨時會被回收的文件。運(yùn)行時最多存儲 4GB,結(jié)束運(yùn)

    2024年02月11日
    瀏覽(34)
  • Unity3D制作一個會移動的方塊(還不會移動照相機(jī))

    Unity3D制作一個會移動的方塊(還不會移動照相機(jī))

    學(xué)習(xí) Unity3D 這么久了,如果你還不會制作一個按下 WASD 就可以移動的方塊的話,那么你的學(xué)習(xí)將沒有一點(diǎn)成就感,我學(xué)習(xí)的時候,我決定 先學(xué)習(xí)移動 ,這樣我就會對 Unity 更加感興趣,學(xué)習(xí)起來的動力會更為充足 先創(chuàng)建一個項(xiàng)目,名為move,如果你手頭有一個隨便亂用的項(xiàng)目

    2024年02月14日
    瀏覽(22)
  • Unity3D 基礎(chǔ)——使用 Mathf.SmoothDamp 函數(shù)制作相機(jī)的緩沖跟蹤效果

    Unity3D 基礎(chǔ)——使用 Mathf.SmoothDamp 函數(shù)制作相機(jī)的緩沖跟蹤效果

    使用 Mathf.SmoothDamp 函數(shù)制作相機(jī)的緩沖跟蹤效果,讓物體的移動不是那么僵硬,而是做減速的緩沖效果。將以下的腳本綁定在相機(jī)上,然后設(shè)定好 target 目標(biāo)對象,即可看到相機(jī)的緩動效果。通過設(shè)定 smoothTime 的值,可以調(diào)節(jié)緩動效果的持續(xù)時間。 Mathf-SmoothDamp - Unity 腳本 A

    2024年01月16日
    瀏覽(19)
  • Baumer工業(yè)相機(jī)堡盟工業(yè)相機(jī)如何通過BGAPI SDK將相機(jī)圖像數(shù)據(jù)用二進(jìn)制的方式保存到本地(C++)

    ? Baumer工業(yè)相機(jī)堡盟相機(jī)是一種高性能、高質(zhì)量的工業(yè)相機(jī),可用于各種應(yīng)用場景,如物體檢測、計數(shù)和識別、運(yùn)動分析和圖像處理。 Baumer的萬兆網(wǎng)相機(jī)擁有出色的圖像處理性能,可以實(shí)時傳輸高分辨率圖像。此外,該相機(jī)還具有快速數(shù)據(jù)傳輸、低功耗、易于集成以及高度

    2023年04月08日
    瀏覽(20)
  • Android Studio App開發(fā)之使用相機(jī)拍攝照片和從相冊中選取圖片(附源碼 超詳細(xì)必看)

    Android Studio App開發(fā)之使用相機(jī)拍攝照片和從相冊中選取圖片(附源碼 超詳細(xì)必看)

    運(yùn)行有問題或需要源碼請點(diǎn)贊關(guān)注收藏后評論區(qū)留言~~~ 對于手機(jī)拍照的App開發(fā)而言,有兩種實(shí)現(xiàn)方式 1:通過 camera工具聯(lián)合表面視圖SurfaceView自行規(guī)劃編碼細(xì)節(jié) 2:借助系統(tǒng)相機(jī)自動拍照,考慮到多數(shù)場景對圖片并沒有特殊要求,所以使用系統(tǒng)相機(jī)更加方便快捷? 效果如下 點(diǎn)

    2024年02月11日
    瀏覽(17)
  • Unity3D實(shí)現(xiàn)登陸注冊功能,實(shí)現(xiàn)本地存儲讀取

    Unity3D實(shí)現(xiàn)登陸注冊功能,實(shí)現(xiàn)本地存儲讀取

    untiy登錄注冊功能的實(shí)現(xiàn),可以永久本地存儲。C#源代碼,也可以用相同的辦法存儲讀取玩家的其他信息或自定義的游戲設(shè)置 實(shí)現(xiàn)了判斷用戶名是否存在,密碼是否前后一致,密碼是否正確等。 這是注冊界面功能 以下是登錄頁功能 ? ? ?

    2024年02月13日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包