[Unity] Scene뷰에서 축 아이콘 없이 스크린샷 찍기Unity/Tips2022. 11. 1. 10:29
Table of Contents
개요
씬뷰에서 스크린샷을 찍고싶을때가 있다.
기즈모도 그리드도 전부 꺼둘수있지만 씬뷰 오른쪽 위 상단에있는
요녀석은 유니티 최신버전이 아니면 끄는기능이 없다.
참고로 유니티 최신버전이라면 아래 이미지와같이 간단하게 끄면된다.
이 글은 저 아이콘없이 깔끔하게 씬뷰를 캡쳐하는 방법이다.
본문
스스로 해결한 방법은 아니고 검색해서 좋은 방법을 알아내서 기록한다.
결과물을 미리 보자면
이와같이 코드로 기능을 만들어 에디터 메뉴로 등록해서 캡쳐하는 방법이다.
코드는 다음과같다.
#if UNITY_EDITOR
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
public class ScreenCapture : MonoBehaviour
{
/// <summary>
/// This adds an entry to the top main menu and a shortcut CTRL+ALT+S and stores files without transparency to Assets/{TimeStamp}.png
/// </summary>
[MenuItem("My Stuff/CaptureEditorScreenshot %&S")]
private static void CaptureEditorScreenshot()
{
var path = Path.Combine(Application.dataPath, DateTime.Now.ToString("yyyy_MM_dd-hh_mm_ss") + ".png");
CaptureEditorScreenshot(path);
}
public static void CaptureEditorScreenshot(string filePath)
{
var sw = SceneView.lastActiveSceneView;
if (!sw)
{
Debug.LogError("Unable to capture editor screenshot, no scene view found");
return;
}
var cam = sw.camera;
if (!cam)
{
Debug.LogError("Unable to capture editor screenshot, no camera attached to current scene view");
return;
}
var renderTexture = cam.targetTexture;
if (!renderTexture)
{
Debug.LogError("Unable to capture editor screenshot, camera has no render texture attached");
return;
}
var width = renderTexture.width;
var height = renderTexture.height;
var outputTexture = new Texture2D(width, height, TextureFormat.RGB24, false);
RenderTexture.active = renderTexture;
cam.Render();
outputTexture.ReadPixels(new Rect(0, 0, width, height), 0, 0);
var pngData = outputTexture.EncodeToPNG();
UnityEngine.Object.DestroyImmediate(outputTexture);
RenderTexture.active = null;
File.WriteAllBytes(filePath, pngData);
AssetDatabase.Refresh();
Debug.Log("Screenshot written to file " + filePath);
}
}
#endif
UnityEditor네임스페이스의 클래스들을 쓰기때문에 빌드에서 에러가 나지 않기위해
전처리문이 들어간다.
씬뷰에도 결국은 시스템적으로 카메라가 있을거기때문에 그 카메라의 기즈모를 얹기전의 화면을 가져와서 저장하는것 같다.
결론
정말 코드로는 뭐든 할 수 있다는걸 새삼 느끼게됐다.
에디터 커스터마이징은 볼때마다 신기한것 같다.
이 코드로 에디터 메뉴등록이랑 단축키지정까지 배울수 있었다.
출처
'Unity > Tips' 카테고리의 다른 글
[Unity] 유니티 에디터 OpenGL/Vulkan 그래픽스API로 열기 (0) | 2023.08.02 |
---|---|
[Unity] Adressable에셋 코드로 링크(인스펙터 등록)하기 (0) | 2023.06.24 |
[Unity] URP/HDRP에서 OnPostRender() 사용하기 (0) | 2022.08.09 |
[Unity] 루트모션 부모에 적용하기 (0) | 2022.03.31 |
인스펙터 조건 Draw (0) | 2021.05.21 |