UI를 Unity로 캡처하지 않는 방법

6743 단어 Unity 시작Unity
Application.기본적으로 캡처스크린샷으로 캡처할 수 있지만
물론 화면의 UI가 표시된 상태에서만 캡처할 수 있습니다.
이렇게 되면 포획 버튼으로 촬영할 때 촌스러운 이미지가 된다.

그걸 해결할 방법과 스크립트를 만들어 봤어요.

① UI 객체를 숨기고 캡처한 후 표시


처음 생각난 방법.
가벼운 것 같지만 이 방법을 눌렀을 때 사용자의 디스플레이에서 사라집니다
나는 반드시 서류를 검사함으로써 포획이 끝난 상황을 확인해야 한다고 생각한다
설치하기 전에 멈췄습니다.

②Camera→RenderTexture→Texture 2D→PNG


이것은 이번에 실시한 방법이다.
Canvas의 Render Mode가 "Screen Space-Overlay"인 경우
"UI를 촬영한 카메라와 게임한 카메라가 다르다"는 성질을 이용하다
Camera의 영상을 잠시 RenderTexture로 변환
→렌더링을 Texture 2D로 변환
→ Texture 2D를 PNG로 변환
→ 파일 쓰기
- 간섭 객체 삭제
이런 방법.
아래 사이트 등을 참고하면서 각본을 만들었다.
https://docs.unity3d.com/ScriptReference/Texture2D.EncodeToPNG.html
http://blog.livedoor.jp/ituki_yu/archives/27225941.html
ScreenShot.cs

using System.Collections;
using System.IO;
using System;
using UnityEngine.UI;
using UnityEngine;

public class ScreenShot : MonoBehaviour {
    public Camera ArCam;

    public void CaptchaScreen()
    {
        Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        RenderTexture rt = new RenderTexture(screenShot.width, screenShot.height, 24);
        RenderTexture prev = ArCam.targetTexture;
        ArCam.targetTexture = rt;
        ArCam.Render();
        ArCam.targetTexture = prev;
        RenderTexture.active = rt;
        screenShot.ReadPixels(new Rect(0, 0, screenShot.width, screenShot.height), 0, 0);
        screenShot.Apply();

        byte[] bytes = screenShot.EncodeToPNG();
        UnityEngine.Object.Destroy(screenShot);

        string fileName = "cap_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png";

        File.WriteAllBytes(Application.persistentDataPath + "/" + fileName, bytes);
    }
}
버튼과 결합하면, 이런 느낌의 포획은 촬영할 수 있다.

↓ 결과

※ 포획된 내용에 연연하지 마세요.

총결산


이러한 방법으로 UI 제외 캡처를 일시적으로 만들 수 있습니다.
스마트폰만 쓰면 동작이 한순간에 멈춘다.셔터 같은 동작까지 더하면 동작이 멈추는 것에 신경 쓰지 않을지도 모른다.
더 똑똑한 방법이 있을지도 몰라...?

좋은 웹페이지 즐겨찾기