1ゲームプログラミングの記事を書いてます。この広告は、90日以上更新していないブログに表示しています。2018-01-08VisualStudioのディレクトリパス設定を少しだけ楽にする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)これで、構成毎にパスが変換されます。ちなみに、マクロの一覧はパスを書くウィンドウの右下のマクロを押すと見ることが出来ます。タイトルが誤解を与えてる気がしたので変更しました。暇だったのでギルティギアXrdのグラフィック記事を読んでいました。www.4gamer.net当時読んだときよりもちゃんと理解出来たので、できそうなところはやってみよう、というのが今回の記事の始まりです。自分は3Dモデリングが出来ません。Blenderを使って既存のモデルを改造しようと思いました。頂点ペイントギルティギアは頂点カラーに色情報は一切持たせず、陰影判定や輪郭線描画にRGBA全てのチャンネルを使っています。Blenderには頂点ペイントという機能があり、それを使えばペイントツールを使う感覚で頂点カラーを編集出来ます。そのままでは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を追加します。名前はなんでも良いです。Alpha]をクリックしてください。ついたVertexColorsが追加されます。これを同じように編集するだけです。色は彩度0で塗って、白が不透明、黒が透明になります。適当にこんな感じで塗りました。次にエクスポートですが、File->Export->Fbxから出来ます。仮にUnityにインポートするときには他の設定もいじったほうが良いですが、他のブログがたくさん紹介してるので割愛します。Unityで描画してみました。頂点カラーのアルファを見て透過処理するシェーダはデフォルトではない(多分)ので、簡単なものですが必要になります。アドオンのリンク先によると、4チャンネルを全てバラバラに編集するアドオンもあるみたいです。ギルティギアのようにチャンネルごとに意味の違う値が必要な場合には便利ですね。質問、訂正などありましたらコメントからお願いします。補足Unityは.blendファイルもそのままインポート出来るので、fbxである必要はないです。蛇足まだギルティギアの表現には全然至っていません。出来たら記事書こうかと思います。07:52【Blender】頂点カラーのAチャンネルを編集・出力できるようにする【v2.77】Tweet広告を非表示にするもっと読むコメントを書く2017-12-21UnityがCドライブを圧迫する!!Unity自分のPCの記憶領域は128GBのSSDをCドライブ、2TBのHDDをDドライブという構成になっています。ほとんどのアプリをHDDに入れて、絶対速度がほしいのだけSSDに入れるという運用ですね。新しいアプリを入れたわけでもないのにCドライブの容量が残り10GBを切って動作が不安定になっていました。んん?となって色々調べた結果、Unityに原因があることがありました。Cドライブの容量が謎に減っているときは、以下の方法が役に立つかもしれません。UnityのAssetStoreからダウンロードしたパッケージAssetStoreからダウンロードすると、UnityPackageはどこに保存されるのでしょうか?特に設定をしていない場合は、Cドライブに保存されます。3Dモデルとかのアセットだと、中にはかなり大きいものもあるので、あっという間に容量を喰らい尽くすことに...(私の場合3GB使ってました...)その場合は以下の方法が役に立ちます。GICacheGIのキャッシュはデフォルトではCドライブに設定されています。GIキャッシュは知らない内にあっという間に膨れ上がる可能性があります。自分の場合は2GB使われていました。3Dゲーム作ってないのに恐ろしや...これを解決する方法は以下です。https://docs.unity3d.com/jp/540/Manual/GICache.html保存されている場所のフォルダを一応削除、あるいは新しいところに移動してからパスを変更することをおすすめします。上記の原因で気づいた方がいるかもしれませんが、ユーザフォルダのAppData以下にアプリのデータは保存されます。Unityにかぎらず他のアプリもデフォルトだとここにボンボン保存していくみたいなので、ちゃんと解決してやれば、さらにCドライブの容量を増やせるかもしれません。(自分の場合Chromeが6GBくらい保存してました。)今回の記事は以上です。他にもUnity関連で原因がありそうだったら追加していきます。質問やこういうのもあるよってあれば、コメントで教えていただければと思います。その2【ShoeBox】Unity前回の続きです。ブログの更新頻度が爆上がりしてます(前年比)7081.hatenablog.comここからはUnity上での作業...といいたいんですが、実は吐き出したxmlファイルをそのまま使おうとするとエラーが出ます。先にxmlファイルを編集します。count="0"></kernings></font>xmlファイルの中身です。参照するpngファイルのパスが明らかにおかしいですね。D:\Desktopumberfont-export謎の場所に改行が入っています。(今回の画像はデスクトップに保存していました)ShoeBoxで出力する際、ファイル名は設定をいじっていなければ「numberfont-export」になります。最後の\が何故かメタ文字扱いになってしまい、\nになって改行コードになってしまうみたいです。この辺ぶっちゃけよくわかりません。2箇所おかしくなっているので、正しいファイルパスに書き換えてください。ここからはUnityでの作業です。Unityをインポートしてからの作業になります。Fontを選択、xmlを選んでください。エラーとかが出なければ、Asset直下にfontsettingsとマテリアルが出来ます。あとはuGUIのTextのFontのところに出来たfontsettingsを突っ込めばOKです。こんな感じになるはずです。GIFのレコーダーのせいか画像汚いですが、Unity上ではきれいに出てます。補足このままだと改行がうまく効かないと思います。fontsettingsのLineSpacingをいい感じの数値にしてください。今回の画像の場合は50くらいがいいかと思います。あと一行目からなんか文字が出る高さがおかしくなることがあります。これはfontsettingsのCharacterRecsts配列のVertのyで変わってきます。Heightが影響してくるようです。ShowBoxで出力する際の文字出力イメージを見ながらいい感じに調整してください。Heightを35くらいにしました。fontsettingsの値の詳細は面倒くさいのでに他に譲ります。今回はこれで以上です。不明点や指摘などありましたらコメントでお願いします。その1【ShoeBox】Unity今回は長くなったので2回に分けます。UnityでUIのテキストを表示するときは、uGUIのTextを使うと思います。(TextMeshProのTextもありますが、オリジナルのビットマップフォントを扱う方法が見つからなかったので割愛)しかしフォントを使って文字を描画するよりも、自分で作った画像をテキストで表示したいときがあると思います。ダメージとかの数字は自分で作った数字画像、つまりビットマップフォントが扱えるとうれしいですね。Unityではビットマップフォントをサポートしていますが、設定を手動でやる場合、0~9の数字を用意するだけでも結構面倒くさいです。楽するためのツールとして、ShoeBoxというものがあったので使い方を紹介します。https://www.assetstore.unity3d.com/jp/#!/content/35760※ShoeBoxはAdobeAirで動作しているので、AdobeAirを先にインストールしておく必要があります。今回はこちらの画像を使います。手順ShoeBoxを起動すると、タブがSpritesを選んだ状態になってると思います。GUIタブを選んで、BitmapFontのところに画像をD&Dしてください。新しく開いたウィンドウのSettingsを選ぶと、また新しいウィンドウが開きます。それのAdvancedタブを選択。するとこんな画面になると思います。設定を以下のように変えてください。Charsを「5678901234」に(あとで解説)一応これで最低限の設定はできてます。他の項目に関してはこの記事の最後に補足程度に説明しておきます。Charsをこのように設定したのは、今回扱う画像の並びが「5687901234」になっているからです。ShoeBoxは文字の形を認識してどの文字を使うか決定しているわけではなく、左上から画像の区切りを1つずつ認識しているだけです。Applyを押すと、以下のようになると思います。上の画像が元画像、左下が完成画像、右下が文字を並べたらどうなるかを見れるところです。なんだか正しく認識できてないっぽいですね。この場合、元画像の数字の間隔をいじってください。ShowBoxを開いたまま画像をいじって、SettingsウィンドウのApplyを押せば読み込み直してくれます。今回は5~9を少し上にするだけで済みました。きれいに出来るとこうなります。Fontを押してください。元画像があった場所にpngとxmlファイルが作られます。できたファイルをUnityに入れるのが次のステップですが、長くなったので記事を2つに分けます。次回更新までお待ち下さい。何か不明点、間違っている点があればご指摘ください。補足ShoeBoxの設定で、大体いじるであろう項目の解説をしておきます。...カーニングに関する設定です。今回は数字だけなのでカーニングはしません。いうか設定の仕方わかりません。...完成画像の横に表示する文字です。どんな感じでフォントが並ぶか見れます。...完成画像の幅、高さを2の乗数にするかです。ゲームに使うならTrueのほうがいいかも。...文字同士の間隔を詰めるかです。...スペース文字の間隔の広さです。...タブ文字の大きさをスペースいくつ分にするかの設定です。2,4,8が主流ですね。その1【ShoeBox】Tweet広告を非表示にするもっと読むコメントを書く2017-11-12【Unity】ポリゴンの裏表で描画を変えるUnityタイトルの通り、シェーダでポリゴンの裏表を判定する方法を紹介します。ポリゴンがカメラからみて裏か表かで描画の仕方を変えたいとき、2つの方法があります。他にも方法があれば教えていただければと思います。・カリングの設定を変えた2つのパスで描画する・VFACEセマンティクスでif判定して描画を分ける今回は裏面と表面で色を変えるだけの超シンプルなシェーダにしました。どちらも得られる結果は同じです。Gistを初めて使いました。前者は単純にパスを2つ作り、CullのFrontとBackに変えただけのものになります。後者はパスは一つで、ピクセルシェーダでVFACEを受け取ってif文で色を変えてます。VFACEは表なら正数,裏なら負数がかえってくるみたいです。どちらもシェーダの事が分かれば以外と簡単です。(自分はVFACEの存在を知りませんでした。後者はif文使っちゃってるので重いと思います。どちらがいいかは自分にはわかりません。毎回if判定走る後者よりも前者のほうが軽い気がします。この2つの切り替えはそんなに手間ではないのでどちらも試して軽い方採用するのがいいと思います。17:10【Unity】ポリゴンの裏表で描画を変えるTweet広告を非表示にするもっと読むコメントを書く2017-10-22【Unity】イントロ+ループ再生を実装するUnityまたUnityの記事です。BGMを流すとき、イントロ+ループというのを前提にしたBGMって結構あると思います。Unityではそれを再生する機能が標準でない(Why?)ので、簡単に出来るのを実装してみました。必要なものは・イントロとループで分けたAudioClipだけです。分けるのめんどいですが実装が簡単な分こっちに手間がかかるということで...ソースは以下です。改良なり再配布なりご自由にどうぞ。}}解説インスペクタにイントロとループのAudioClipをそれぞれ設定すれば再生出来ます。今回のやりかたは、AudioSourceをイントロとループでそれぞれ用意して、イントロの再生が終わった瞬間からループを再生する。いう仕組みになっています。PlayScheduled()を使うことで、再生を遅延させることができます。AudioSetttings.dspTimeはTime.timeとは別に、オーディオを再生するための正しい時間みたいなものです。時間指定で音を再生する場合はこれ使ったほうがいいと思います。他の方法として、AudioSourceは1つで、イントロの再生が終わると同時にClipを入れ替えるという方法もありますが、切り替えの瞬間にどうしてもノイズが走ってしまいます。フレーム単位でしか切り替えられないので当然っちゃ当然なんですが、解決方法イマイチわからず...一番はAudioSourceもAudioClipも1つだけで、ループを開始してほしい時間を指定すれば動いてくれるスクリプトなんですが、色々試した結果上記の方法が一番実装は楽そうでした。サンプルレートとかも考慮して組まないと駄目な気がします。今回の調べて思ったんですが、Unityのマニュアルとリファレンスの音周りがほとんど翻訳されてないのが軽く衝撃でした。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。