7080 + 1

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

【VSCode】おすすめ拡張一覧

お久しぶりです。更新しなさすぎて広告が出るようになってしまったので久しぶりに更新します。
VSCodeのおすすめ拡張をズラリと列挙します。
これは絶対入れるべき!というのばかりなのでぜひ試してみてください。
おすすめ順で列挙します。

多分誰にでもおすすめ拡張

  • Trailing Semicolon

神。待ってた。Ctrl+;でその行の最後にセミコロンを打つor削除してくれるだけの拡張。
地味だけど一番使用頻度は高い。

  • jumpy

最強。マウスをあまり使わずにいろんな場所に飛べる。
キーボードから手を離す時間を極力なくすことで作業速度を上げるのです。

  • Multiple clipboards for VSCode

クリップボードの拡張。Ctrl+Shift+Vで昔のコピー履歴を辿れる。
コピペのショートカットはよく押し間違えるので重宝する。

  • Trailing Spaces

不要な箇所にあるスペースやタブをハイライトしてくれる上に、削除もしてくれる。
"trailing-spaces.trimOnSave": trueにすると保存時に削除してくれるので必要ならどうぞ。

  • GitLens

Git用拡張。誰がいつこの行を変更したかをいつでも見れる。他にもGit関連の機能がいろいろあるみたい?

  • ExcelViewer

ExcelCSVが見れちまうんですよ!

ローカルで履歴を管理してくれる。
バージョン管理使ってても極稀にやらかしてしまった時の最終手段に。

  • TODO Parser

// TODO とコメントしておけば、フッターにTodoをタスク表示してくれる

Unity・C#使い向け拡張

C#使うなら必要かなと。

  • C# XML Documantation Comments

コメントのスラッシュを3回打つと<summary>が打てるようになる。

  • Mono Debug
  • Unity Tools
  • Debugger for Unity

Unity使うなら必要かなと。

  • ShaderLabVSCode

UnityのShader用拡張。確かシンタックスハイライトとインテリセンスに対応する拡張。

蛇足

拡張じゃないけど毎回インストールする度にいじってる設定を書いておく。

  • "editor.codeLens": false,

reference数の表示設定。うざいので消してる。

  • "editor.showFoldingControls": "always"

コード折りたたみの表示設定。デフォルトはマウスオーバーで表示になってる。

  • "csharp.suppressDotnetInstallWarning": true

起動時に.NET CLIがどうたらって言ってくるの無視

最後に

拡張独自の設定もあるので、ちょっと変えたいなとか思った時は拡張のリファレンスを見るべし。
セミコロンが必要な言語だったらTrailing Semicolonは入れるべき。入れて。

【Unity】ImageEffectを使わずにポストプロセス処理をする

始めに

ImageEffectを使うと、オリジナルのポストプロセスを書けるのはUnityの機能として以前からありました。私もポストプロセスでステンシルバッファを使った描画処理をやっていたのですが、Unity2017.3にアップデートした途端に挙動がおかしくなってしまったのです...。

色々と調べてみた結果、ImageEffectを使わずにポストプロセスをする方法を思い付いたので記事にします。

ちなみに、ステンシルバッファをImageEffectでは使えないのかというと、そんなことはないです。Unity2017上でもちゃんと動く方法はありますが、今回の本筋からは外れるので、別記事にします。そのうち書こうと思うで、少々お待ちください。

では、ImageEffectを使わずにどうやってポストプロセスをするのか、書いていきます。

実装

結論を言葉だけで説明すると、

  • uGUIのImageでカメラを覆って、GrabPassを使って描画する。(RenderQueueは一番最後になるように設定)

になります。具体的に説明します。

・用意するもの
ポストプロセスで使うシェーダ
uGUIのImage

以上になります。
まず、uGUIのImageをシーン内に置いてください。これ用のCanvasの設定が必要なので、新規Canvasの子で作ったほうがいいかもです。
で、Canvasの設定を以下のようにしてください。
f:id:atori708:20180325000903p:plain

RenderCameraはポストプロセスをかけたいカメラです。
PlaneDistanceは他のオブジェクトより絶対前になればどこでもいいですが、カメラのnearプレーンのすぐ近くにしておけば安心だと思います。今回はMainCameraのnearと同じ数値にしています。
これでカメラがImageを一番前面にして描画するようになります。
また、Imageはカメラを覆うようにWidth,Heightともにstreachにし、Materialにポストプロセス用の奴を適用します。
f:id:atori708:20180325001239p:plain

次にシェーダの方です。この記事を見ている皆さんには、恐らくImageEffectで適用していたシェーダがすでにあると思います。それを少し編集するだけでいいです。
編集するのは2箇所になります。

  • RenderQueueをとにかくでかい数値に
  • GrabPass{}を追加する

RenderQueueは大きいほど後に描画されます。とにかくでかくすることで、他の全ての描画が終わった後に描画を走らせます。
そしてGrabPassにより、_GrabTextureに描画後の結果が入ってきます。なので、_GrabTextureをシェーダでいじってやれば、ポストプロセスで処理することができる。というわけです。

一応ものすごくシンプルなシェーダを、ImageEffectと今回のパターンの両方載せておきます。
色を反転するポストプロセスシェーダです。変化している場所を見比べてください。


この方法だとImageEffectに比べて、カメラのMSAAをONにしててもステンシルバッファを取得出来るというメリットがあります。ただ、Unityが推奨しているポストプロセスのやり方ではないので、なにか予期せぬことが起きるかもしれません。実機等でちゃんとテストしてみてください。

なんかわからんけどImageEffectうまく動かねえって人は今回の方法を試してみてはいかがでしょうか。

【Unity】Redoのショートカットを変えた~い【Windows】

※これはWindowsのUnityだけの話です。

事始め

UnityのショートカットはUndoがCtrl+ZRedoCtrl+Yになっています。この2つは昔からショートカットで定番となっており、ほとんどのソフトウェアで使えるものだということは、皆さんご存知のとおりです。

しかし、ここ数年のWindowsのソフトでは、Ctrl+Shift+ZでもRedoが出来るものが増えてきています。これはCtrl+Yよりも指を動かす量が少ないのでとても快適です。私の場合、一度慣れるとCtrl+YRedoをすることはほとんどなくなりました。
Ctrl+Shift+Zに対応していないソフトはその瞬間に使う気力をなくします。手を大きく広げてYに指を伸ばす事の醜さったら目も当てられないですね。

恐ろしいことにUnityはCtrl+Shift+Zに「未だに」対応していません。これはWindowsユーザにだけ与えられた特別な足枷です。ショートカットキーを変更することすら許されていません。Unity Technologiesは一体何を考えているのでしょうか?

...前口上が長くなりました。Unity最高!

本題

Unityはエディタ拡張を書くことでショートカットキーを増やすことができます。指定したメソッドを呼び出すので、自分で書いた処理をショートカットキーで呼び出すことも可能です。
で、今回のRedoのショートカットを増やす拡張がこちら。

単純なので説明するまでもないですね。メニューにRedoが追加されちゃいますけど、まあ気にならないと思います。
これで明日から快適なUnityライフを送れますね!

【Unity】リッチテキストを使うためのstring型の拡張メソッドを書きました

Unityで表示される文字(ConsoleログやuGUIのテキストなど)はリッチテキストに対応しています。
タグを付けると、色を変えたりサイズを変えたり出来るんですね。

f:id:atori708:20180304201234p:plain

ちなみに対応してるのは色・サイズ変更、ボールド、イタリックの4種類みたいです。
いちいちタグを着けるのは面倒くさいので、拡張メソッドを書きました。

100%車輪の再発明だけど気にしない。

【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つの設定だけでかなり変わるみたいなので、試してみてください。