Unityスクリプトリファレンスの日本語と英語を切り替えるbookmarklet

javascript:(function(){var i=window.location.pathname.split("/").slice(1),n=i.indexOf("ScriptReference");if(-1!==n){var o=["","ja","current"];(0<=i.indexOf("ja")||0<=i.indexOf("jp"))&&(o=[""]);var e=o.concat(i.slice(n)).join("/"),c=window.location.origin+e;window.location.href=c}})();

Unity ref toggle <- bookmarklet

メソッド名などをググってUnityのスクリプトリファレンスを探すと、英語の方だけが出てきたり、ちょっと古いバージョンのページが出てきたりします。
そういう時、最新の日本語のページが見たいなと思っても、スクリプトリファレンスには日本語と英語を切り替える導線が見当たりません。
しかも、URLの設計が微妙におかしくて、URLをちょっと書き換えたらと思っても、毎回間違えます。
毎回、小さくイライラしてて、この間ついカッとなって切り替えをするbookmarkletを作りました。
かなり雑に作ったので、動かないケースとかもあるかもしれません。

詳細

(function(){
    var pathes = window.location.pathname.split('/').slice(1);
    var index = pathes.indexOf('ScriptReference');
    if(-1 === index) return;
    var isToEnglish = 0 <= pathes.indexOf('ja') || 0 <= pathes.indexOf('jp');
    var prefix = ['', 'ja', 'current'];
    if(isToEnglish) prefix = [''];
    var path = prefix.concat(pathes.slice(index)).join('/');
    var url = window.location.origin + path;
    window.location.href = url;
})();

英語版: https://docs.unity3d.com/ScriptReference/Shader.SetGlobalFloat.html
日本語版の最新: https://docs.unity3d.com/ja/current/ScriptReference/Shader.SetGlobalFloat.html
日本語版の現時点最新バージョン: https://docs.unity3d.com/jp/540/ScriptReference/Shader.SetGlobalFloat.html

URLのバリエーションとしてはこんな感じで、何故かjajpの両方があり得ます。
英語版にはついてないけどcurrentを付けておけば、とりあえずは困らないはず。
という事で、URLにjajpがあれば英語版に、無ければ日本語版に遷移する様にしました。

Unityスクリプトリファレンスの謎

SetGlobalFloat - Google 検索 - Google Chrome 2017-09-19 12.28.47

こんな感じで、とある検索結果でも「jp/540」と「ja/540」が混在しているし、英語版のURLには「en」がありません。
URLの差的には「/ja/current」が有るか無いかだけなんだけど、そんなに頻繁に切り替えるわけじゃないので、割と忘れてるしうっかり「/current/ja」と間違えてしまったり。

https://docs.unity3d.com/en/current/ScriptReference/Shader.SetGlobalFloat.html
https://docs.unity3d.com/ja/current/ScriptReference/Shader.SetGlobalFloat.html

元からこんなURLだったら、「en」を「ja」に書き換えるだけで良いし、bookmarkletなんていらないんだけどなぁ。

書いた日

2017年9月18日頃

UnityとBlenderとSubstance Painterの視点操作の比較

UnityとBlenderに加えてSubstance Painterも少し使う機会が出てきました。
どれも3Dなので視点操作があるソフトウェアなんだけど、とても煩わしいのが3つそれぞれ操作が違います。
2つならまだなんとなく覚えてられたけど、3つにもなるともう混乱します。

最期に使いだしたSubstance Painterが、特になんでそんな設定なの?って思うような設定なのも理由として大きい気もするけど。
とりあえず、慣れるまではすぐ確認出来る様に、UnityとBlenderとSubstance Painterの視点操作の比較を表にして書いておきます。

視点操作の比較

操作 Unity Blender Substance Painter
視点平行移動 中ボタン Shift+中ボタン Alt+中ボタン, Ctrl+Alt+左クリック
視点回転 右クリック 中ボタン Alt+左クリック
ズーム スクロール スクロール (※逆)スクロール, Alt+右クリック

書いた日

2017年8月11日頃

[Unity] Shader Forgeのいくつかのノードの例を作ってみた

先日参加した第12回3DCG Meetupに行ってきました | kanonjiのブログリアルタイムレンダリングでのNPR表現が、UE4の話だけどUnityのShader Forgeでも出来そうだったので、Shader Forgeで可能な限り再現しつつノードの例を作ってみました。

ちなみに、Shader Forgeは確か$80くらいしてたと思うんだけど、8月下旬に約半額に設定されて$43.20に、さらに今はBack to School Saleで半額の$25.92になっています。
Back to School Saleは9月17日までらしいけど、23時59分までなのか17日の途中で終わるのか、そもそもどこのタイムゾーンなのかはっきりしないので、15日16日くらいまでと考えた方が良いかも。

セールはともかく、$43.20になったのは単純な値下げなのかそれともまた$80くらいに戻るのかどっちなんだろう。
Amplify Shader Editorみたいな、類似アセットも2016年に登場したりしたから、対抗してるのかな?

なんでセール名がBack to Schoolなのか良く分からないけど、Back to School Saleのも置いておきます。

Shader Forgeの例について

Desktop 2017-09-07 14.37.16

参考にしてるのが、さっき挙げたスライドの名前の通りNPR表現なので、と言っていいのか分からないけど全部Unlitです。
スライドはUE4のマテリアルノードについて書いてるので、Shader Forgeでなんとか似たようなことが出来たものだけを並べます。
スライドでも、Valueノードで固定値を乗算したりしてるけど、自分は数値の意味は分かってないので、数値をいじってなんとなく良い見た目になったのを使っています。

リポジトリ

ところで、自分の探し方が悪いのかもだけど、Shader Forgeって定番っぽい感じしてるのに、その割には解説してるところが少ない気がします。
もっと、解説とかサンプルとかが沢山あると良いんだけど。
海外のフォーラムだと割とあるんだけど、結構込み入ったノード構成だし、スクリーンショットから読み取るのも割と大変です。

kanonji/unity-try-asset-shaderforge-example

なので、今回作った例はここに置いておきます。
当然ですがShader Forgeは入ってません。

Screen Position Horizontal / Vertical Gradient

https://www.slideshare.net/kurosaurus/npr-78632548/9

スライドにあった絵と全然見た目が違うけど、Screen PositionノードとComponent Maskノードを使って、グラデーションにするやつ。
Shader ForgeにもComponent Maskノードは有ったけど、Screen PositionノードがRとGを個別に出力出来るので、Component Maskノードは省略できました。

ScreenPosition HorizontalGradient-Scene

ScreenPosition HorizontalGradient

ScreenPosition VerticalGradient-Scene

ScreenPosition VerticalGradient

World Positionノード

WorldPositionのグラデーションをMaskしてみる
https://www.slideshare.net/kurosaurus/npr-78632548/14

World PositionノードはShader Forgeにあったけど、高さのグラデーションにするのに、紆余曲折してColorノードを使っています。
なので、作り方が違うけど似たような見た目は出来たと思います。

WorldPosition HeightGradient-Scene

WorldPosition HeightGradient

Screen Depthノード

PixelDepth/ScreenDepth
https://www.slideshare.net/kurosaurus/npr-78632548/15

Pixel Depthは無かったけどScreen Depthノードがありました。
置いてあるオブジェクトが少ないせいか、調整が甘いのか、ちょっと雰囲気が出てないけど、似たような見た目にはなったと思う。

ScreenDepth-Scene

ScreenDepth

Normal Directionノード

PixelNormalWS/VertexNormalWS
https://www.slideshare.net/kurosaurus/npr-78632548/16

PixelNormalWS/VertexNormalWSという名前のノードは無かったけど、Normal Directionノードで似たような感じになりました。
色が全然違うけど。

NormalDirection-Scene

NormalDirection

Timeノード

https://www.slideshare.net/kurosaurus/npr-78632548/18

時間によって変化させるためのTimeノード。Shader Forgeにも同じのがあります。
時間変化なので、スライドではどんなだった確認出来ないけど、大体似たような事が出来たはず。

Time

View Positionノード

https://www.slideshare.net/kurosaurus/npr-78632548/20

これも再生時に変化が見れる系なのでスライドだと確認出来ません。
記憶もあいまいなだし、Shader ForgeにはCameraPositionWSが無かったので、ワールド座標でのカメラ位置が取れるノードとしてView Positionノードを使った例を作りました。

ViewPosition

View Positionノード Hole

近づくと穴が開く仕組み
https://www.slideshare.net/kurosaurus/npr-78632548/34

同じくView Positionノードで、近づくと穴が開く仕組みを再現してみました。

ViewPosition Hole

Shader Forge関連リンク

書いた日

2017年9月7日頃

環境

環境 バージョン
Unity 5.6.3p1
Shader Forge 1.38

Bash on Ubuntu on Windows環境をCreators UpdateのUbuntu 16.04で作り直した

Windows 10ならUbuntuのbashが使えるって事で、Unityのやり易さもあって、開発用PCをWindowsにしてます。
してます、と言いつつ、環境構築が面倒でPHPでの開発はまだMacでやってるけど。
Macの方にもまだちゃんと環境が無いものを触るときは、なるべくWindowsの方で環境を作る様にしてたんだけど、golangとかnodeで、Bash on Ubuntu on Windowsが原因のエラーに遭遇してしまいました。
どうやらCreators UpdateのUbuntu 16.04なら解決してるらしいので、重い腰を上げて環境を作り直しました。
単純にアップデートというわけにはいかず、Bash on Ubuntu on Windows環境を1回消して、インストールし直しなのが面倒です。

Bash on Ubuntu on Windows環境の作り直し

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\WINDOWS\system32> lxrun /uninstall /full
これにより Windows 上の Ubuntu がアンインストールされます。
Ubuntu 環境およびすべての変更内容、新しいアプリケーション、およびユーザー データが削除されます。
続行するには、"y" を入力してください: y
アンインストールしています...

まずはBash on Ubuntu on Windows環境を削除。
必要なものはバックアップしたつもりだったけど、1個忘れていて動画をffmpegでアニメーションgif化する簡単なシェルスクリプトを失ってしまいました。

PS C:\WINDOWS\system32> bash
-- ベータ機能 --
これにより Windows に Ubuntu がインストールされます。Ubuntu は Canonical によって配布される製品であり、
次のサイトに示される条件に基づいてライセンスされています。

https://aka.ms/uowterms

続行するには、"y" を入力してください: y
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
Ubuntu のロケールを Windows のロケール (ja-JP) と一致するように設定しますか?
既定のロケールは en_US です。
続行するには、"y" を入力してください: y
既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と一致する必要はありません。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: myuser
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: password updated successfully
インストールが正常に終了しました
環境が間もなく開始されます...
ドキュメントを参照できる場所: https://aka.ms/wsldocs
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

myuser@hostname:/mnt/c/Windows/System32$

改めてBash on Ubuntu on Windows環境を作成。
Creators Updateが出てから少しした時、WindowsストアにUbuntuが出て(もしかして元からあった?)、今後は他のディストリビューションも出る予定と発表されました。
他のディストリビューションはともかく、UbuntuはWindowsストアからインストールした事なく今まで使えてたよなと思ったけど、上のログの通りWindows ストアからダウンロードする処理が組み込まれてました。

Ubuntu 16.04

before

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

after

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

この通りUbuntuのバージョンが上がりました。

Bash on Ubuntu on Windowsのセットアップ備忘録 | kanonjiのブログ

を見ながら残りの細かい作業をやっていきます。

wslttyのアップデート

mintty/wsltty: Mintty as a terminal for Bash on Ubuntu on Windows / WSL

前回のセットアップ備忘録によると0.7.1をインストールしたっぽい。
今は1.7.9が出ていて随分バージョンが上がったなと思ったら、1個前は0.7.8.3なので、バージョニングのルールが変わっただけなのかな?
なんにせよ、新しいバージョンが出ている事だしアップデートします。
アップデート方法が分からなかったので、wsltty-1.7.9-install.exeをダウンロードして上書きインストールしました。

.minttyrcの設置しなおし

Bash on Ubuntu on Windows環境を1回消したからなのか、wslttyを上書きインストールしたからなのか定かじゃないけど%LOCALAPPDATA%\wsltty\home\%USERNAME%\.minttyrcが消えていました。
homeフォルダごと消えていたので、フォルダも作り直して.minttyrcを設置したらちゃんと認識しました。

wsltty起動のショートカット

wslttyでBash on Ubuntu on Windowsを使うと.bash_profileも.profileも読み込まれない件の対策 | kanonjiのブログ

(0.7.1) %LOCALAPPDATA%\wsltty\bin\mintty.exe --wsl -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash -l
(1.7.9) %LOCALAPPDATA%\wsltty\bin\mintty.exe --wsl -h err --configdir="%APPDATA%\wsltty" -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash -l

こんな感じで、起動するときのオプションが割と変わってます。

  • WSL % in Mintty #Windowsのホームがカレントディレクトリ 非ログインシェル
  • WSL ~ in Mintty #Ubuntuのホームがカレントディレクトリ 非ログインシェル
  • WSL -l in Mintty #Windowsのホームがカレントディレクトリ ログインシェル

例によって3個のショートカットが用意されるけど、ログインシェルじゃないと.profileが読み込まれないので、自分はWSL -l in Minttyだけ使います。

#Windowsのホームがカレントディレクトリ ログインシェル
%LOCALAPPDATA%\wsltty\bin\mintty.exe --wsl -h err --configdir="%APPDATA%\wsltty" -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash -l

##Ubuntuのホームがカレントディレクトリ ログインシェル
%LOCALAPPDATA%\wsltty\bin\mintty.exe --wsl -h err --configdir="%APPDATA%\wsltty" -o Locale=C -o Charset=UTF-8 /bin/wslbridge -C~ -t /bin/bash -l

WSL -l in Minttyをコピーして、オプションに-C~を追加してWSL ~ -l in Minttyにします。
これでUbuntuのホームがカレントディレクトリ版になります。

hostnameの調節

これは設定済みでした。
Bash on Ubuntu on Windows環境は1回消してるので残ってる事は無いと思うからUbuntu 16.04では設定済みなのかな。

Git

$ git version
git version 2.7.4

Gitを見ると最新は2.14.1だけど、プリインストール(apt)のgitは2.7.4でした。
そんなに古くはないし、この間話題になってたGitの脆弱性によってリポジトリをクローンすると「うんこもりもり」と表示される – BppLOGCVE-2017-1000117 in Ubuntuを見たところパッチが当たってるみたいなので、無理して最新にしなくても良いかな。

インストール済みaptパッケージのアップデート

$ sudo apt update
$ sudo apt upgrade
$ sudo apt autoremove

前はsudo apt-get autoremoveだったけどsudo apt autoremove出来るようになってました。

direnv

$ direnv version
2.7.0

direnv/direnv: Unclutter your .profile

aptで入れたdirenvは2.7.0で、最新は2.12.2です。
前回はaptで入れられなかったから手動で最新を設置したけど、よく考えたらaptで入れられるのはMacのhomebrewと違ってあまり最新じゃないっぽい。
まぁこれは後で考える事にします。

SSH Server Broker/Proxyを無効にする

サービス 2017-09-06 12.54.03

Windows10 Anniversary updateで追加されたSSH Server Broker/Proxyは、どうやらBash on Ubuntu on Windowsは無関係っぽい | kanonjiのブログで調べた感じ、Bash on Ubuntu on WindowsではなくAnniversary UpdateのものだったっぽいSSH Server Broker/Proxyは、今見たらいつの間にか消えていました。
いつの間にかというか、まぁ多分Creators Updateで消えたんだと思うけど、ずっと確認なんてしてなかったから、もっと前に消えていた可能性も一応あります。

~/.ssh に鍵を置く

SourceTreeなどWindows側から鍵を使いたい事があるのでC:\Users\myuser\.sshに置いてあった鍵をコピーして/home/myuser/.sshにも鍵を置きます。

anyenv

riywo/anyenv: all in one for env

anyenvを入れて、anyenvでphpenvやndenvやgoenvを入れます。

os.networkInterfaces()
Error: EINVAL: invalid argument, uvinterfaceaddresses

os.networkInterfaces error in NodeJS / Yeoman · Issue #468 · Microsoft/BashOnWindows

golangで遭遇したエラーはもう何やってた時の事か忘れちゃったけど、nodeのこのエラーは解消してる事も確認出来ました。
このBash on Ubuntu on Windows環境で何か特有のエラーに遭遇しちゃうと、しばらくは環境のバージョンも先が無いので、今後は何も出てこないで欲しいところ。

環境

環境 バージョン
Windows Windows 10 Home [Version 10.0.15063]
Ubuntu 16.04.2 LTS
wsltty 1.7.9
Git 2.7.4
direnv 2.7.0

書いた日

2017年9月6日頃

テキストでUMLやER図などの図を書くツールのまとめ

UMLとかER図とか、必要なのは分かってたけど図を書くのは面倒でちょっと敬遠してました。
でも最近その必要性が自分の中で高まってたので、段々と書かざるを得なくなってきています。

ただ、マウスを使って図を描いたり、要素が増えてドラッグしてレイアウトしたりとかがやっぱり面倒で、テキストで書けるPlantUMLなんかを少し使っています。
PlantUMLは完成度も高く、最近はDocBase.ioesa.ioなんかでも対応してたりと、流行ってる感じもしてます。
でも、名前の通り基本的にはUMLなので、ER図なんかは得意じゃ無いです。
クラス図を流用してなんとなくそれっぽいのは出来るかもだけど。

そこで、他にも無いかなと思って探して見つけた、テキストで図が書けるツールを並べておきます。
まだ全部試すまでは出来てないので、評価や紹介というレベルにはなってません。

UML

PlantUML

plantuml-class

テキストで図を書くツールとしては、恐らく代表的なツール。
名前の通りUMLのツールで、UML系の図なら割とサポートしている。

UMLの中のクラス図を書くとかシークエンス図を書くという宣言が無く、文脈によってレンダリングされる図が変わるのが、ちょっとモヤっとする。

Java製で、まだ開発は続いている。

余談としてGollumでPlantUML

GollumでPlantUMLをレンダリングする様に設定する | kanonjiのブログ

個人用ローカルwikiとしてGollumを使っていて、そこではPlantUMLも一緒に使っています。

ER図

erd

BurntSushi/erd: Translates a plain text description of a relational database schema to a graphical entity\-relationship diagram\.

PlantUMLだとER図は書けないので、探してきたのがこれ。
名前の通りER図専用。
レイアウトに一定の規則性があって、基本的にリレーションシップを結んだら横に並ぶ。
同じエンティティから枝分かれしているエンティティが縦に並ぶ感じ。
つまりリレーションシップを結んだエンティティが縦に並ぶレイアウトは出来ないようで、重要なリレーションシップを結んだデンティティが遠くに配置されてしまって見辛いみたいな事が有り得る。
なので、レイアウトの為にリレーションシップを書く順番を変えたりしという調整が必要になったりする。

Haskell製で、機能的には完成してるという扱いなのか、もう数年コードは変化していない。

erdm

unok/erdm: Text base ERD tool

最近作られた新しいツール。
その時はまさにerdを使ってER図を書いてる時だったので、乗り換えるにはちょっとタイミングが悪かったから、次にER図書く時には試してみたい。

golang製。

その他

mermaid

knsv/mermaid: Generation of diagram and flowchart from text in a similar manner as markdown

フローチャートとシークエンス図、あと変わり種でガントチャートとGitのコミットのグラフとかも生成出来るっぽい。
一応クラス図もサポートしてるみたい。
ガントチャートをちょっと作ってみたけど、ガントチャート自体の必要性がその時あまりなかったので、その後触ってない。

Node製で開発も続いている。

uiflow

hirokidaichi/uiflow: uiflow \- the simplest way to write down your ui\-flow diagram like markdown

画面遷移図的なものを書く際に、僕が個人的につかっていた表現方法として、UI Flowsというのがある。これはRuby on Railsを生み出したことで有名な37signalsのブログで紹介された技法だ。

もう保守されない画面遷移図は嫌なので、UI Flow図を簡単にマークダウンぽく書くエディタ作った – Qiita

という感じのUI Flowsに特化したツールらしい。
このエントリーを書き溜めている時にTwitterでRTされてきたのを見ただけなので、全く触ってない。

でもちょうど、この間リーダーとデザイナーがこんな図を描いて会話してるのを見たので、役に立ちそうだし、機会があれば使ってみたい。

Node製。

Mscgen

シークエンス図専用っぽい。
今のところPlantUMLで十分なのでスルーしました。

書いた日

2017年9月3日頃

Windows 10でペンタブレット長押しするとメニューが出るのを止める

最近少しBlenderでモデリングをやってるんですが、操作の中にはペンタブレットを使いたくなる時があります。
まだほとんどやってないけどスカルプトとか、テクスチャーを調整する時とか、モデリングの雑な下書きを描く時とか。
なので、古いペンタブレットを引っ張り出して使ってみたんだけど、少しでもペン先をクリック状態にし続けると、メニューが出てきてしまい、とても何かを描いたりするのに使えませんでした。

設定で解決出来たんだけど、少し使い始めたとはいえペンタブレットはたまにしか触らない道具なので、またPC買い替えた時とか忘れてそうなのでメモしておきます。

解決方法

コントロールパネル -> ペンとタッチ -> 長押しを選択 -> 設定(S) -> 長押しを右クリックとして認識する(E)

ペンとタッチ 2017-08-11 18.47.10

長押しの設定 2017-08-11 18.50.07

このチェックを外せば、長押しでメニューが出なくなります。メニューが出るというより、右クリック扱いだったけど。
一応、線を引いてるときは出ないんだけど、ペン先をタブレットに接地させたまま少しでも止まってるとすぐ出るので、ちょっとでも迷ってたらすぐ出てきてすごい邪魔でした。
これを使いこなせる人は居るんだろうか。

ペンとタッチ 2017-08-11 18.50.56

ついでに、フリックをショートカット的に使う設定もあるみたいだけど、これも描くという操作と相性悪すぎる気しかしないし、使うつもりもなかったので、ついでに無効にしておきました。

環境

環境 バージョン
Windows Windows 10 Home

書いた日

2017年8月11日頃

[Unity] 2Dゲームのかっこいいエフェクトが作れそうなアセットSpriteToParticles

Unity アセット真夏のアドベントカレンダー 2017 : ATNDの28日目のエントリーです。

前日のは拡張エディタ Third Person Controller – Melee Combat Template 使い方まとめ アセット真夏のアドカレ8/27 ~武器の作成~ – Study Worksです。

名前の通りスプライトとパーティクルでエフェクトを作るアセットです。
って書いてもふんわりして的を得ないと思うし、このアセットはデモ映像を見た方が分かりやすいと思うので、アセットストアにもある動画ですが置いておきます。

UIと組み合わせたり背景画像に適用したりと、色々と出来るみたいだけど、自分は特にこういうドット絵のキャラクターへのエフェクトが気に入って買いました。

同梱されてるデモ

  • UI Examples
  • Dinamic Sprite Examples
  • Static Sprite Examples

同梱されてるデモを見た感じ、大枠としてはこの3種類の例が入っています。
UI Exampleは名前の通りで、ざっとデモシーンを見た感じuGUIと組み合わせている様です。
残りの2つの方だけど、多分Sprite RendererL+Animatorが付いてるコマ送りスプライトアニメーションの場合がDinamicで、Sprite Rendererだけの場合がStaticなんだと思います。

Dinamic Sprite Examples

自分が気に入っているドット絵キャラクターへのエフェクトはDinamic Sprite Examplesで、まだこれしかちゃんと見てないのでこっからはDinamic Spriteに絞って書いていきます。

少なくともDinamic Spriteでは、SpriteToParticlesがやってくれるのはエフェクトを作る事、ではない様です。
エフェクトそのものはUnity – マニュアル: パーティクルシステム( Shuriken )をそのまま使っています。
つまり、かっこいいエフェクトが作れるかどうかに関しては、Shurikenを使いこなせる必要があります。
とはいえ、前述の動画で登場しているエフェクトはデモシーンが含まれてるので、そっからParticle Systemコンポーネントをコピー出来るし、それを少し改造していくのはとっかかりとして良さそうです。

ちなみに、SpriteToParticlesがやってくれる事を自分が把握した範囲だけで表すと、スプライトの形や色情報を取り出してパーティクルシステムに渡すインターフェースといった感じだと思います。

Read/Write Enabled

SpriteToParticlesが色とか取得する為に、画像ファイルを選択時のインスペクターのところで、 Read/Write Enabledを有効にする必要があります。

Use Pixel Source Color、Use Emission From Color

デモシーンに入っていた例を1個取り出して、少し設定を変えて並べてみました。

Unity 5.6.2p4 Personal (64bit) - Pixel Source Color - Emission From Color.unity - unity-tri-asset-sprite-to-particles - PC, Mac & Linux Standalone _DX11_ 2017-08-28 06.33.36

SpriteToParticles.csにUse Pixel Source ColorUse Emission From Colorのチェックボックスがあります。
上の例は、この2つの設定を変えたものです。

項目 説明
Use Pixel Source Color スプライトから取得したpixelの色を使ってパーティクルを生成する。Particle SystemのStart Colorは無視というか上書きされている。
Use Emission From Color 有効にし、スプライトの指定した色の部分からだけパーティクルを生成する。

基本的にはスプライトの、透明でない領域内のランダムな個所(恐らくピクセル)からパーティクルが発火します。
スプライトの色をパーティクルに反映させるかどうかと、パーティクルを発生させる場所を色で指定出来るという設定です。

SpriteToParticlesのデモシーンにある、武器やマントだけのエフェクトも、この設定を使っています。

- Use Pixel Source Color Use Emission From Color Particle SystemのStart Color
1個目 有効 無効 #ffffff
2個目 無効 無効 #ffffff
3個目 無効 有効にして髪の色を指定 #ff0000
4個目 有効 有効にして髪の色を指定 #ff0000

ちなみに、上の例の設定はこんな感じになっています。

改造してみた

デモシーンのSpriteToParticles.csとParticle Systemコンポーネントをドット絵のユニティちゃんに付けて、改造してみました。
実はパーティクルシステムはまだ全然分かってないので、割と苦戦していますが、ちょっとそれっぽい感じに出来たかな。

左側の方は、静止しててもエフェクトが出てるのは良いんだけど、移動したときにどうすればいいのか、まだ試行錯誤中です。
右側の移動時の残像は、見た目は良いと思うんだけど、パーティクル数が元の100倍の100000個なので、もしかしたら重いかも知れません。
これはもっと別の方法で作った方が良い様な気はしています。

2D-Essentials

Unity Asset Storeによる2D-Essentialsのリストがあるんですが、残念ながらSpriteToParticlesは入ってません。
でも、この中に加えても良いくらいなんじゃないかなと思っています。
欲を言えば、パーティクルシステムに不慣れでもなんとか出来る様に、デモシーンの例がもっと豊富だと嬉しいですが。

advent calendar 2017-08-28 kanonji

今回のアドベントカレンダーの趣旨に、マイリストを使ってアセットを紹介というのがあったんだけど、SpriteToParticles単体で精一杯だったので、自分のお気に入りリストから適当にドット絵アセットをリストに入れてみました。
ただ、もっと色々とあった様な気がしたんだけど、あんまり無かったので仕方なく改めて探したりしてて、とはいえお気に入りに入れてあったって理由もなくなると、どんな紹介だか良く分からなくなっちゃうので、お茶濁し感は否めません・・・

リポジトリ

kanonji/unity-try-asset-sprite-to-particles-example

今回自分が改造して作ったものを置いてあります。当然ですがSpriteToParticlesは入ってません。
SpriteToParticlesを持ってないと再現出来ないし、持ってたら同梱のデモシーン見れるしで、見どころは殆ど無いですが、大量のパーティクルで作った残像のやつとか、一応見れます。

【Unity】指定のアセットがプロジェクト内に存在しない場合、不足アセット一覧とパッケージへのリンクを表示してくれる効果が発動するアセットを作成した – テラシュールブログ

このAssetRequestを導入しているので、SpriteToParticlesを購入済みなら簡単に動く状態に出来ると思います。

書いた日

2017年8月28日頃

第12回3DCG Meetupに行ってきました

3DCG Meetup #12 – connpassに行ってきました。

プログラマーの集まる勉強会は沢山あるのに3DCG方面はかなり珍しく、そっち方面にまったく明るくないのに手を出してる自分としては、関連するいろんな事を知れてとても助かるイベントです。

3DMU #12のまとめ – Togetterまとめ

リアルタイムレンダリングでのNPR表現

イベントページのタイムスケジュールを見てた時は、良く分かってなかったけど、とても参考になる内容でした。
UE4のマテリアルノードは、シェーダーを扱ってるんだと思うんだけど、シェーダーをいじるとこんな表現が出来るという例を見せてもらって、とっかかりになった感じ。

WorldPosition HeightGradient-Scene

UE4はあまり触ってないけど、UE4のマテリアルノードに近い事が出来るUnityのアセット、Shader Forgeを使って、資料を見ながら同じような表現を作ってみたりしています。
ノード名が違ったり、該当するノードが見当たらなかったりして、再現が難航してるものもあるけど。


[Unity] Shader Forgeのいくつかのノードの例を作ってみた | kanonjiのブログ

ある程度再現出来たものがあるので、エントリーとリポジトリを公開しました。

ちなみに、NPRはNon Photorealistic Renderingの略らしいです。

Airtone/エアトーン

NPR表現で例えばこんなゲームの表現が作れたり。

僕とNUKEと…

NUKEは名前はちらっと見たことがあったけどよく知らない方面です。
どうやらAffter Effectsと同種のソフトウェアらしい。
思いっきりざっくりと言えばAffter Effectsのノードベース版で、ノードベースだから適用したエフェクトの調整とかやりやすく、作業を引き継いだ時なんかにもノードを見れば前の人がどんな事をしたのかが分かる感じらしい。

かなり高額なソフトウェアらしく、最近ちょっと手を出してるゲームに使うグラフィックとは割と遠そうなので、自分がNUKEを使う事は無さそうだけど、ノードベースの良さは他のノードベースのツールを使っててなんとなく分かります。

第12回3DCG Meetup振り返り – kick the base

3DCG Meetupでは初の学生登壇者だったらしく、うまく説明できないけど会場からの質問に登壇者が答えた内容に対し、会場受付をしていた方が補足をするみたいな、面白い展開になっていました。

で、4R8どうなのよ?

ZBrush4R8の話。
Blenderにもスカルプトモードはあるし、スカルプトするにしてもBlenderで良いって思ってたけど、ZBrushの表現力は素人目には桁違いに見えました。
とはいえ、ツールがすごいという事は、使う方もそれだけ習熟が求められるんだろうと思うので、手を広げ過ぎれない事を考えると、手は出せない気はしてます。
何も見ずにこんな話だったと書ける程には理解出来てないけど、短い時間にいろんな機能を分かりやすく解説してもらって、ZBrushってこんな感じなのかってのを知れました。

本当に無駄な仕事がしたくない人のためのHoudiniプロシージャル入門

プロシージャルってところがプログラマーとしては興味惹かれるHoudiniです。
第12回3DCG MeetupもZBrush以外はノードベースだし、最近なにかと流行ってる感じのノードベースだけど、Houdiniはずっと昔からノードベースでやってるノードベースの老舗みたいな感じらしい。
Houdiniプロシージャル入門って事で、行く前から気になっていたけど、どうやら取り組むにはSOPを理解する事が大切なんだとか。
なので、イベント後にSOPについて軽く調べてみたけどいまいちよく分からずでした。

学習方法

雰囲気はつかめたと思うし、学習に使えるリソースも教えて貰えたので、今度取り組んでみたい。
ただ、他にもやりたい事はいっぱいあるし、どれをやるかはちゃんと考えないと。

書いた日

2017年8月19日頃

UnityのAudio Mixerを使ってみたらAudio Groupの名前変更にちょっとバグがある様子

ゲーム中のSEを管理するサウンドマネージャーを作ろうと、下調べをしていたらUnityにはAudio Mixerという機能があるのを知りました。
オーディオをグループ分けして、グループごとに音量をコントロールしたり、止めたり、オーディオエフェクトをかけたりと、なんか便利そうなので使ってみる事にしました。

で、試してみてたらAudio Groupの名前が変更できないってバグがありました。
既に報告済みなんだけど、絶対に名前変更できないというわけじゃなく、出来なくなってしまうケースがあるというやつなので、一応その辺をメモしておきます。
まぁ「Fix in review」というステータスなので、じきに修正されそうだけど。

ちなみにまだUnity 5.6系を使っています。
Unity 2017でどうなってるかは確認してません。

Audio Mixerウィンドウ

Audio Mixerの機能でMixerを作り、その中にいくつかのAudio Groupを作るんだけど、その辺も含めAudio Mixerの操作は、専用のAudio Mixerウィンドウが用意されてます。
Audio Groupを作ってみたら New Group という名前で、そのままだと把握出来なくなるし変更しようとしたら、出来ませんでした。
どうやらダブルクリックは元々正常動作として名前変更に使えないっぽいけど、右クリックからRenameを選んでも無反応です。

Audio Groupの名前が変更できないケースと出来るケース

  • Audio Mixerウィンドウをドラッグして移動させると、Audio Groupのリネームが出来なくなる。
  • 1度でも動かしたらではなく、初期位置から動かすとダメ
  • 動かしてしまっても、初期位置に戻せばリネームは出来る

大体こんな感じです。
自分の環境だと、Audio Mixerウィンドウの初期位置はProjectウィンドウのところになっていて、Projectウィンドウを縦長に細めにしてるので、Audio Mixerウィンドウの置き場所としてはちょっと合いません。
なので、Audio Mixerウィンドウ初めて開いた時に直ぐ移動してしまい、Audio Groupの名前が変えられない条件に合致させてしまいました。

Audio Mixerウィンドウの初期位置はレイアウトを介して変えられる

Audio Mixerウィンドウを好みの場所に移動してから、いったん現状をレイアウトとして保存します。
そして、そのレイアウトを適用すると、Audio Mixerウィンドウの初期位置がそのレイアウトの位置に変ります。
これで、Audio Groupの名前変更が出来ないバグも回避しつつ好みの場所でAudio Mixerウィンドウを使えます。

動画

この通り、Audio Mixerウィンドウを移動しちゃって、Audio Groupのリネームが出来なくなってるところから、レイアウトを使ってバグを回避しました。
そして、初期位置が変わってるので、移動したら再発し、戻したらリネームが出来ています。

Unity Issue Tracker

いくつか重複してIssueが上がってるけど、どれも「Fix in review」なので、そのうち直りそうではあります。

Audio Mixer

ついでにAudio Mixerについての解説も置いておきます。

環境

環境 バージョン
Unity 5.6.2p4
Windows Windows 10 Home

書いた日

2017年8月13日頃

Blenderで作成したUVマップを削除したくなった時の方法

Blenderで作っていたモデルのUVマップを削除したいって事があったんだけど、検索しても恐らく古いバージョンでの手順だったりと、地味に方法が分からず迷ったのでメモしておきます。
あまり情報が無いのは、UVマップを削除する必要があまりないからなんだろうけど。

Blender 2017-08-03 17.41.00

で、その方法は、方法っていう程の事はなくて、上の画像の様にPropertiesDataパネルにUVマップがあるので、選択して右の-ボタンを押すだけでした。
UV展開だけしてFBXエクスポートしてたから、ここにそのUVマップが載ってるを知らなかった。

環境

環境 バージョン
Blender 2.78c

書いた日

2017年8月3日頃