Vtuberさんにとってはちょっと便利なUnitypackage作った。

f:id:vrmizunana:20181107204250p:plain

その名も
自分の透過素材を簡単に作る奴
タイトルとか飾りで良いんや、どうでも、どうでもいい。

作った動機

Vtuberやってるとめっちゃよくあるんですけど、自分の素材ってかなり必要になるんですよね。所謂、宣材ってやつです。コラボする時にも透過素材が必要だとかで提出することが多いです。もちろん、自分の動画・配信サムネイルを作る時も。

とあるやり取りをしている時に、Unityで撮影したものを宣材にしている人がいました。Unity上にグリーンバックを置いて、それをPhotoshopで加工して、とか……。

いや、Unityなんだからあるだろ!透過して保存くらい!というか、VRChatとか3teneにはそういう機能があるんだから、行けるだろ!と思い調べて1時間くらいで作りました。

機能

滅茶苦茶シンプルで、実行した時に写ったカメラの状態をスクリーンショットして、pngとして保存されるだけのツールです。

Unity上でのLightingに慣れている人はUnity上のLightingで撮影したいって人も居ると思うのと、Unity上でモーション当てて撮影したいって人も居る……というか、最近私がそれにハマってるだけなのですが。

通常のスクリーンショットだと、どうしてもアルファ値(透過する値)だけが抜けないので、このprefab使うって感じです。

使い方

unitypackageで開いた後に、中に入ってる「ScreenshotCamera.prefab」をHierarchyに入れて、映したい所にカメラをセットしてビルドするだけ。そうすると、プロジェクトの直下に「ss.png」が保存されています。詳しくは同封されている、readme.txtでも見てください。
分からなかったら、Twitterで私にでも聞いてください。

ダウンロード

 
1drv.ms

コード

需要あるかわからんけど、調べて書いた奴。産まれて初めてC#書いた。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Collections;
using System.IO;
using System;


public class ss : MonoBehaviour
{
    private const string V = "ss.png";

    // Use this for initialization
    void Start()
    {
        IEnumerator coroutine = TestCoroutine();
        StartCoroutine(coroutine);
    }


    IEnumerator TestCoroutine()
    {
        print("スクリーンショットが撮影されました");
        yield return new WaitForEndOfFrame();

        var Filename = V;
        var tex = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, false);
        tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        tex.Apply();

        // Encode texture into PNG
        var bytes = tex.EncodeToPNG();
        Destroy(tex);
        File.WriteAllBytes(Filename, bytes);
    }



    // Update is called once per frame
    void Update()
    {

    }
}

ちょっと勉強になったかもしれない。