UnityでGameViewのスクショ撮るやつ

3Dモデルをチェックしたり、他の人に確認してもらうための画像を用意したりするのに、ボタン一つで前後左右まとめて撮影できたらなーと思ったので勉強がてらスクリプト作りました。よければお使いください。

前に書いたこの記事のやつを改善したものです。
https://note.com/go3510/n/na58907861564

ソースコード

using UnityEngine;
using System;
using System.IO;
using System.Collections;
public class ScreenShotCapturer : MonoBehaviour
{
   private void Update()
   {
       // スペースキーが押されたら
       if (Input.GetKeyDown(KeyCode.Space))
       {
           //保存先フォルダを独自に指定したい場合、こちらを有効化してください。
           //ただし、パスに日本語が混じると画像を保存できないため気を付けてください。
           //string path = EditorUtility.OpenFolderPanel("Open Folder", "", "");
           
           //デフォルトの保存先。該当フォルダが存在しない場合は新規に作成します。
           string path = "C:/Users/user/Desktop/UnityScreenShot/";

            //オブジェクト名を取得
           string name = transform.name;
           float rotation = transform.rotation.y;
           DateTime presentTime = DateTime.Now;
           string YY = DateTime.Now.Year.ToString();
           string MM = DateTime.Now.Month.ToString();
           string dd = DateTime.Now.Day.ToString();
           string HH = DateTime.Now.Hour.ToString();
           string mm = DateTime.Now.Minute.ToString();
           string ss = DateTime.Now.Second.ToString();
           if (Directory.Exists(path))
           {
           }
           else
           {
               Directory.CreateDirectory(path);
           }
           transform.rotation = Quaternion.Euler(0, 0, 0);
           // スクリーンショットを保存
           CaptureScreenShot(path + name + "_正面_" + YY + MM + dd + HH + mm + ss + ".png");
           StartCoroutine(DelayMethod(5, () =>
            {
                transform.rotation = Quaternion.Euler(0, 90, 0);
                CaptureScreenShot(path + name + "_横1_" + YY + MM + dd + HH + mm + ss + ".png");
            }));
           StartCoroutine(DelayMethod(10, () =>
           {
               transform.rotation = Quaternion.Euler(0, 180, 0);
               CaptureScreenShot(path + name + "_背面_" + YY + MM + dd + HH + mm + ss + ".png");
           }));
           StartCoroutine(DelayMethod(15, () =>
           {
               transform.rotation = Quaternion.Euler(0, 270, 0);
               CaptureScreenShot(path + name + "_横2_" + YY + MM + dd + HH + mm + ss + ".png");
           }));
           StartCoroutine(DelayMethod(20, () =>
           {
               transform.rotation = Quaternion.Euler(0, 0, 0);
           }));
       }
   }
   // 画面全体のスクリーンショットを保存する
   private void CaptureScreenShot(string filePath)
   {
       ScreenCapture.CaptureScreenshot(filePath);
   }
   //渡された処理を指定時間後に実行する
   private IEnumerator DelayMethod(int delayFrameCount, Action action)
   {
       for (var i = 0; i < delayFrameCount; i++)
       {
           yield return null;
       }
       action();
   }
}

Licence: MIT License
Copyright: ©Go3510

使い方

Unityで撮影したいオブジェクトにスクリプトをアタッチして、Playボタンを押した後にスペースキーを押してください。撮影できない時は、GameViewウインドウを一度クリックしてアクティブにしてください。

画像1

正面・背面・右90°・左90°の四方向からスクリーンショットを撮影します。撮影された画像の保存先は、デスクトップの「UnityScreenShot」というフォルダに保存されます。(C:/Users/user/Desktop/UnityScreenShot/)
該当するフォルダがデスクトップにない場合は、新たに作成されます。

保存先フォルダを独自に指定したい場合は、ソースコード15行目に記載の箇所を有効化し、17行目の方をコメントアウト等で無効化してください。
ただし、パスに日本語が混じると画像を保存できないため、独自に保存先を指定する際はフォルダ名やパスに気を付けてください。

//string path = EditorUtility.OpenFolderPanel("Open Folder", "", "");
string path = "C:/Users/user/Desktop/UnityScreenShot/";

ここを

string path = EditorUtility.OpenFolderPanel("Open Folder", "", "");
//string path = "C:/Users/user/Desktop/UnityScreenShot/";

こうする。

解像度はGameViewの設定から変更してください。(UnityのInspector拡張から作ろうとも思ったんですが、アプリとしてビルドするわけじゃないので要らんなと思い入れていません)

最終的にこんな↓ような画像が保存されていたら成功です。ファイル名は、「オブジェクト名_(撮影方向)_撮影日時」になります。

GKtest_正面_202211713243


画像3

GKtest_横2_202211713243

GKtest_横1_202211713243

オワオワリ

この記事が気に入ったらサポートをしてみませんか?