7080 + 1

ゲームプログラミングの記事を書いてます。

【Unity】トランジションするシェーダを作りました

テクスチャ一枚を差し替えるだけでトランジションの仕方を変えられるシェーダを作りました。

f:id:atori708:20180303001548g:plain
動画は汚いですがきれいにでてます。本当です。
何かいいGIFレコーダーないですか...

とそれは置いておいて、使い方を。

uGUIのImageに適用するシェーダとして作ってます。
トランジション用テクスチャはマテリアルにではなく、Imageにつけてください。
またテクスチャはグラデーションしてるグレイスケールの画像を用意してください。
機能は以下です。

また、ImageのColorの値が反映されるようになっています。

ソースは以下になります。

ImageEffectを使ってやる方法も出来るっぽいですが、こっちのほうが実装簡単だったのでこっちに落ち着きました。
(多分ImageEffectでの実装の方が軽くなると思います)

補足

ニーアオートマタのポーズ画面に入る時の演出はこの方法でやってるといつかのCGWorldで書いてありました。
この手法自体は昔からあるみたいですが、あんな複雑な動きが出来るテクスチャを作れるツールって何使ってるんでしょうか...

VSCodeがGitを認識しなくなったら

ある日VSCode(1.20)がGitを認識しなくなりました。
ソース管理タブに行っても「有効なソース管理プロバイダーがありません」と表示され何もできなくなります。
(言語が英語だと"There is no active source control providers."と表示される)

色々調べると以下のページが参考になりました。
stackoverflow.com


どうやら設定の"git.path"をgit.exeがあるディレクトリパスに設定してやると行けるみたいです。
これで解決??

私はしませんでした。VSCodeを再起動しても表示は変わらず。

しかし上記ページの下のほうで、「git.pathに設定したのを環境変数にも設定すると行けるよ」的な事が書いてありました。
環境変数のPathに設定してからPCを再起動すると... 行けました!
f:id:atori708:20180224142545p:plain

突然認識されなくなったので原因はわかりませんが、とりあえず解決して良かったです。
メモ代わりに記事にしました。

VisualStudioのビルド時間を簡単に早くする

この記事は2015年にQiitaで執筆したものです。情報が古い可能性があります。

目的

プログラマにとって一番時間の無駄になっているであろう「ビルド時間」を短縮できないかと考えていました。
調べていると、簡単に短縮出来る方法があったので紹介します。
筆者はVisual Studio 2013 Communityで検証しました。

プロパティをいじる

これは非常に簡単で、その割に効果の高い方法です。

1. まずはプロジェクト→プロパティ→構成プロパティ→C/C++
複数プロセッサによるコンパイルを「はい」にする。

2. 構成プロパティ→C/C++→コード生成の最小ビルドを有効にするを「いいえ」にする。

たったこれだけです。
試しに、自分が今作っているプロジェクトのビルド時間を測定してみました。

設定前 設定後
Debug 33222ms 22252ms
Release 33578ms 20123ms


見れば分かる通り、10秒以上短縮しています。
この2つの設定だけでかなり変わるみたいなので、試してみてください。

VisualStudioのディレクトリパス設定を少しだけ楽にする

この記事は2015年にQiitaで執筆したものです。情報が古い可能性があります。

VisualStudioを使ってプログラミングしていると、プロジェクトのプロパティからインクルードやライブラリのディレクトリパスを設定することがあると思います。

その設定を少しだけ楽にする方法があったので紹介。

ReleaseやらDebugやら・・・

ディレクトリパスを通すときに面倒くさいのが、DebugビルドかReleaseビルドかで通すパスを変えなければいけないパターンが多いことです。
中には64bitか32bitかで変える必要もあり、4パターン設定しなければならないなんてことも。
毎回それを設定していて面倒くさいと思った人も多いかと思います。

が、実は1つの設定だけで全ての構成で適用できる方法があったので紹介。

マクロを使う

仮に、C:API\bin\の場所にライブラリフォルダがあったとします。
bin以下はDebugやRelease、さらにx64やx86で分かれていて、その中にlibファイルがあるとします。

例:
C:API\bin\
 x86\
  Debug\
  Release\
 x64\
  Debug\
  Release\

今までは構成毎にパスを変更していましたが、実はマクロ機能を使うことができます。

今回のような場合だと、以下のように書くことが出来ます。
C:\API\bin\$(Platform)\$(Configutation)

これで、構成毎にパスが変換されます。
ちなみに、マクロの一覧はパスを書くウィンドウの右下のマクロを押すと見ることが出来ます。

【Blender】頂点カラーのAチャンネルを編集・出力できるようにする【v2.77】

※追記 タイトルが誤解を与えてる気がしたので変更しました。

ふと暇だったのでギルティギアXrdのグラフィック記事を読んでいました。もうだいぶ前の記事ですね。
www.4gamer.net

当時読んだときよりもちゃんと理解出来たので、できそうなところはやってみよう、というのが今回の記事の始まりです。
ですが自分は3Dモデリングが出来ません。ならばBlenderを使って既存のモデルを改造しようと思いました。

頂点ペイント

ギルティギアは頂点カラーに色情報は一切持たせず、陰影判定や輪郭線描画にRGBA全てのチャンネルを使っています。

Blenderには頂点ペイントという機能があり、それを使えばペイントツールを使う感覚で頂点カラーを編集出来ます。
f:id:atori708:20171224070157p:plain

が、そのままではRGBしか編集することができません。
やるとすれば、VertexColorsをアルファチャンネル用として作って編集する方法があります。しかしそれではRGBチャンネルが2つで6チャンネル必要になるので、今回の場合メモリの無駄使いです。(というか頂点シェーダに複数の頂点カラー渡せるんでしょうか?)

ということで、この記事ではタイトルの通り、Blenderで頂点カラーのRGBAチャンネルを編集する方法を紹介します。(ギルティギアではない。まさにギルティ)

アドオンを使う

色々調べていると、Aチャンネルも頂点ペイントで編集出来るアドオンを作ってくれている方がいました。
https://forum.unity.com/threads/vertex-rgba-blender-2-5x.254038/

v2.xと書いてありますが、2.77でも動作を確認できました。
アルファチャンネルをいじれるアドオンと、それをFBXに埋め込むためのアドオン両方必要です。入れ方はリンク先を参照してください。

使い方

まずRGBチャンネル用のVertexColorsを追加します。名前はなんでも良いです。次にアドオンで追加したツールから、[Paint on Alpha]をクリックしてください。(見当たらなかったら上図での左下の+ボタンを押すと出てくると思います)
すると先程作ったVertexColorsの名前に _ALPHA とついたVertexColorsが追加されます。これを同じように編集するだけです。色は彩度0で塗って、白が不透明、黒が透明になります。

適当にこんな感じで塗りました。シンプルに4頂点。
f:id:atori708:20171224071842p:plain

次にエクスポートですが、File->Export->Fbxから出来ます。エクスポートする時のFBXのバージョンは FBX 6.1 ASCII を選択してください。仮にUnityにインポートするときには他の設定もいじったほうが良いですが、他のブログがたくさん紹介してるので割愛します。

Unityで描画してみました。頂点カラーのアルファを見て透過処理するシェーダはデフォルトではない(多分)ので、簡単なものですが必要になります。
f:id:atori708:20171224071911p:plain


アドオンのリンク先によると、4チャンネルを全てバラバラに編集するアドオンもあるみたいです。ギルティギアのようにチャンネルごとに意味の違う値が必要な場合には便利ですね。
今回は以上です。質問、訂正などありましたらコメントからお願いします。

補足

Unityは.blendファイルもそのままインポート出来るので、fbxである必要はないです。

蛇足

まだギルティギアの表現には全然至っていません。きっと出来たら記事書こうかと思います。
この記事とは関係ないですが、ギルティギアを作っているアークシステムワークスの次回作であるドラゴンボールファイターズは、照り返しやリムライト表現が増えてよりリッチになっているっぽいので、またどこかで発表してほしいなあとか思いました!

UnityがCドライブを圧迫する!!

自分のPCの記憶領域は128GBのSSDをCドライブ、2TBのHDDをDドライブという構成になっています。ほとんどのアプリをHDDに入れて、絶対速度がほしいのだけSSDに入れるという運用ですね。

が、特に新しいアプリを入れたわけでもないのにCドライブの容量が残り10GBを切って動作が不安定になっていました。んん?となって色々調べた結果、Unityに原因があることがありました。

Cドライブの容量が謎に減っているときは、以下の方法が役に立つかもしれません。

原因その1 UnityのAssetStoreからダウンロードしたパッケージ

AssetStoreからダウンロードすると、UnityPackageはどこに保存されるのでしょうか?特に設定をしていない場合は、Cドライブに保存されます。3Dモデルとかのアセットだと、中にはかなり大きいものもあるので、あっという間に容量を喰らい尽くすことに...(私の場合3GB使ってました...)
その場合は以下の方法が役に立ちます。
unitygeek.hatenablog.com

原因その2 GICache

GIのキャッシュはデフォルトではCドライブに設定されています。GIキャッシュは知らない内にあっという間に膨れ上がる可能性があります。自分の場合は2GB使われていました。3Dゲーム作ってないのに恐ろしや...

これを解決する方法は以下です。
https://docs.unity3d.com/jp/540/Manual/GICache.html

保存されている場所のフォルダを一応削除、あるいは新しいところに移動してからパスを変更することをおすすめします。

補足

上記の原因で気づいた方がいるかもしれませんが、ユーザフォルダのAppData以下にアプリのデータは保存されます。Unityにかぎらず他のアプリもデフォルトだとここにボンボン保存していくみたいなので、
ちゃんと解決してやれば、さらにCドライブの容量を増やせるかもしれません。(自分の場合Chromeが6GBくらい保存してました。)

今回の記事は以上です。
他にもUnity関連で原因がありそうだったら追加していきます。質問やこういうのもあるよってあれば、コメントで教えていただければと思います。

【Unity】ビットマップフォントをUnityで扱う その2【ShoeBox】

前回の続きです。ブログの更新頻度が爆上がりしてます(前年比)
7081.hatenablog.com

ここからはUnity上での作業...といいたいんですが、実は吐き出したxmlファイルをそのまま使おうとするとエラーが出ます。
ので、先にxmlファイルを編集します。

<font>
	<info face="D:\Desktop
umberfont-export" size="35" />
	<common lineHeight="35" scaleW="137" scaleH="141" pages="1" />
	<pages>
		<page id="0" file="D:\Desktop
umberfont-export.png" />
	</pages>
	<chars count="12">
		<char id="53" x="105" y="53" width="29" height="50" xoffset="0" yoffset="-10" xadvance="33" /><!-- 5 -->
		<char id="54" x="37" y="46" width="34" height="50" xoffset="0" yoffset="-15" xadvance="38" /><!-- 6 -->
		<char id="55" x="72" y="91" width="31" height="44" xoffset="0" yoffset="-10" xadvance="35" /><!-- 7 -->
		<char id="56" x="72" y="45" width="32" height="45" xoffset="0" yoffset="-10" xadvance="36" /><!-- 8 -->
		<char id="57" x="0" y="46" width="36" height="49" xoffset="0" yoffset="-10" xadvance="40" /><!-- 9 -->
		<char id="48" x="0" y="0" width="45" height="45" xoffset="0" yoffset="-9" xadvance="49" /><!-- 0 -->
		<char id="49" x="80" y="0" width="17" height="44" xoffset="0" yoffset="-9" xadvance="21" /><!-- 1 -->
		<char id="50" x="46" y="0" width="33" height="44" xoffset="0" yoffset="-9" xadvance="37" /><!-- 2 -->
		<char id="51" x="105" y="0" width="31" height="52" xoffset="0" yoffset="-9" xadvance="35" /><!-- 3 -->
		<char id="52" x="0" y="96" width="36" height="44" xoffset="0" yoffset="-9" xadvance="40" /><!-- 4 -->
		<char id="32" x="0" y="0" width="0" height="0" xoffset="0" yoffset="0" xadvance="22" /><!--   -->
		<char id="9" x="0" y="0" width="0" height="0" xoffset="0" yoffset="0" xadvance="176" /><!-- 	 -->
	</chars>
	<kernings count="0">
	</kernings>
</font>

xmlファイルの中身です。参照するpngファイルのパスが明らかにおかしいですね。2箇所おかしいです。

D:\Desktop
umberfont-export

謎の場所に改行が入っています。(今回の画像はデスクトップに保存していました)
ShoeBoxで出力する際、ファイル名は設定をいじっていなければ「numberfont-export」になります。で、一番最後の\が何故かメタ文字扱いになってしまい、\nになって改行コードになってしまうみたいです。この辺ぶっちゃけよくわかりません。
とりあえず2箇所おかしくなっているので、正しいファイルパスに書き換えてください。

ここからはUnityでの作業です。ShoeBox Tools for Unityをインポートしてからの作業になります。

Asset->ShowBox Tools->Import Bitmap Fontを選択、xmlを選んでください。
エラーとかが出なければ、Asset直下にfontsettingsとマテリアルが出来ます。

あとはuGUIのTextのFontのところに出来たfontsettingsを突っ込めばOKです。
こんな感じになるはずです。
f:id:atori708:20171203021940g:plain
GIFのレコーダーのせいか画像汚いですが、Unity上ではきれいに出てます。

補足

このままだと改行がうまく効かないと思います。fontsettingsのLineSpacingをいい感じの数値にしてください。今回の画像の場合は50くらいがいいかと思います。
あと一行目からなんか文字が出る高さがおかしくなることがあります。これはfontsettingsのCharacterRecsts配列のVertのyで変わってきます。ここはShoeBoxのTxt Line Heightが影響してくるようです。ShowBoxで出力する際の文字出力イメージを見ながらいい感じに調整してください。今回の画像の場合、Txt Line Heightを35くらいにしました。
fontsettingsの値の詳細は面倒くさいのでに他に譲ります。

今回はこれで以上です。不明点や指摘などありましたらコメントでお願いします。