【Unity】Unityに出力可能なエフェクトエディタ「SPARK GEAR」

sparkgear.net
UnityとCocos-2Dxに対応しており、大量のテクスチャやエフェクトのバンドル、簡単なモデルの作成、スマホ実機にリアルタイムで変更が反映できる、などが売りの新しいエフェクトエディタ。
ドローコールの削減など、負荷削減に関する対策もされているようで、期待が高まります。

詳細は上記公式サイトと、以下のページ、スライドが参考になります。
jp.gamesindustry.biz

www.slideshare.net

スライドの最後にもある通り、現在機能制限のあるフリー版が無料配布されています。
ダウンロードは以下の公式Facebookページから。
株式会社Spark

起動にはいくつかランタイムが必要なので、zip解凍してReadmeを読みましょう。
(Readme.txtを読む文化をすっかり忘れて一人で「起動しない…!!」ってなってました)

尚、エディタはWindows専用なので、MacユーザーはVirtualBoxとかで試す感じですね。
サンプルがいくつか含まれているので、使い方がわからない場合はサンプルを見て各種設定を確認することが出来ます。

このフリー版にはSDKなどが含まれていないので、Unityでの動作確認はできなさそうです。
サイトによると、

Unity,Cocos2d-xの組み込み再生が可能。逆にUnityなどで制作したものを再利用することも可能。特にUnityではPrefab化したリソースをスクリプトからPlayするだけで組込可能。
(エンジンの依存性なし)
ランタイムを組み込むことでSPARKFXエディターで制作したアセットをiOS,Android,OSX,Windows上で再生できます。
http://sparkfx.jp/main/%E5%B9%85%E5%BA%83%E3%81%84%E4%BA%92%E6%8F%9B%E6%80%A7/

とのことなので導入は容易そうですが、実際のところは使ってみないと分からないのと、初期費用100万円+月額20万円は容易に出せない(白目)ので、一旦は今後利用者が増えてレポートが出るのを待つばかり。

【Unity】アセットの読み込みでシンボリックリンクを使う

Mayaで作業をしててFBX書き出しをしてUnity上で確認したいんだけど、FBXファイルをUnityの該当プロジェクトのAssets配下に置きたくないみたいなこと、ありませんか!
あんまりないと思いますけど、なんやかんやであったので覚書です。

ぱっと思い浮かぶのはMacならエイリアス、Windowsならショートカットだったんですけど、それぞれこれではうまくいきません。
じゃあシンボリックリンクならどうか、ということでとりあえずMacで試してみます。

まずはAssets配下にResourcesディレクトリを作成して、ここに特定のディレクトリへのシンボリックリンクを作ることにします。
ターミナルを開いて以下のような感じでコマンドを実行します。

# Resourcesに移動
cd /Users/tm8r/Documents/TestUnityProject/Assets/Resources

# シンボリックリンクを作成
ln -s /Users/tm8r/Documents/maya/projects/default/scenes scenes

これでUnityに戻ると、「/Users/tm8r/Documents/maya/projects/default/scenes」があたかも「Assets/Resources/scenes」にあるかのように振る舞ってくれるので、あとはResources.Loadとかでいつも通りファイルを扱えます。

次にWindows。Resourcesディレクトリ作成までは変わりません。
準備ができたら憎きコマンドプロンプトを起動して以下のような感じでコマンドを実行します。

# Resourcesに移動
cd C:¥Users¥tm8r¥Documents¥TestUnityProject¥Assets¥Resources

# シンボリックリンクを作成
mklink /D scenes C:¥Users¥tm8r¥Documents¥maya¥projects¥default¥scenes

「/D」はディレクトリのシンボリックリンクを作成するための引数です。

lnコマンドとターゲットとソースの引数の順番が逆なのが若干罠ですね。
これでMac同様、WindowsでもUnityでちゃんと認識されるシンボリックリンクが作成できました。わいわい。

【Unity】UniRxを使ってuGUIのイベントを監視する

f:id:tm8r:20160513202840p:plain
こういうのをつくります。
ざっくり言うと、InputFieldに入力されたディレクトリに存在するFbxファイルをDropDownに列挙するものです。

f:id:tm8r:20160513202844p:plain
Hierarchyはこんなかんじ。
InputFieldとDropDownを作り、DropDownはOptionsを初期値の1つだけにしておきます。

次に以下のスクリプトを用意して、Canvasとか適当なところにアタッチします。
gist.github.com

これで最初に書いた要件が実現できます。UniRx捗る。

ランタイムで任意のディレクトリにあるFBXを閲覧できるビューアーを作るつもりで実装を始めたものの、思いの外これがダルくて、どうやらFBXのパースをUnityに任せられない(自前で用意しないといけない)っぽいことが分かって膝から崩れ落ちたので現実逃避な記事です。つらみ。
それっぽい有料のアセットを使うか、assimpとか使ってなんとかする感じになるのかなー。むーん。

UniRx - Reactive Extensions for Unity - アセットストア - Asset Store

【Unity】同じMaterialが指定されているかチェックする

Rendererに同じMaterialが指定されているかチェックしたいという要件がありまして。

より具体的に言うとFBXとそこから作られたPrefabのMaterialに差分がないかチェックするという感じだったのですけど、ブログに載せる用のFBXファイルを用意するのもアレだなーということで、「ねーよそんな要件」って感じですけどProjectビューで選択された2つのオブジェクトにおけるルートのRendererのMaterialが一致するかチェックするものを書きました。

gist.github.com

Materialの比較は30行目の以下のコードで行っています。

var result = targetMaterials.SequenceEqual (compareMaterials);

SequenceEqualを使えば順序も含め、2つのシーケンスが等しいかどうかをチェックすることができます。
Enumerable.SequenceEqual(TSource) メソッド (IEnumerable(TSource), IEnumerable(TSource)) (System.Linq)

順序は考慮せずにチェックしたい場合、長さチェックをした上でそれぞれの全要素が合致するか見ていってもいいんですが、27-28行目みたいにソートしてしまえばSequenceEqualが使いまわせます。

本題からは逸れますが、MenuItemの第二引数にtrueを指定したboolを返すメソッドを用意することで、指定したメニューを有効にするか無効にするかを判定することができます。

上のコードでいうと、11行目のメソッドで「Assets/CheckSameMaterials」を選択したときの振る舞いを定義し、35行目のメソッドでこのメニューを有効にするか無効にするかを判定するものを定義しています。
具体的には、Projectビューで選択しているオブジェクトが2つであり、かつ両方ともプレハブまたはFBXファイルである場合だけtrueを返しているので、この条件に合致しない場合は「Assets/CheckSameMaterials」がグレーアウトします。

【Unity】Alfred+AppleScriptで楽々Unity複数起動

小ネタ。

AlfredのPowerpack(有料版)を使っていればシェル起動ができるのでいいんですけど、無料版を使ってる場合はそうもいかないので、Unityを複数起動するときいちいちターミナルを開いてました。

が、いよいよめんどくさくなってきたので、AppleScriptを使って楽ちんにしました。

続きを読む

【Unity】エディタ拡張でUniRxを用いてコルーチンを実行する

Unityさんのエディタ拡張をしているとコルーチンを利用したいみたいなシーンがたまに出てくるのですけど、エディタスクリプトではコルーチンが利用できません。
EditorApplication.updateを利用すればそれっぽいことが出来ますが、ハンドリングも大変だなーと調べてみると、以下のようなEditorApplication.updateをラップしたものを公開されているのがいくらか見つかります。
UnityEditor上でStartContinueっぽいのを動かす - Qiita
EditorCoroutine: coroutines for Unity editor operations. Usage: EditorCoroutine.start(myIEnumerator) · GitHub

他にうまいことやることないのかなーと思いながらいつも通り実装していると、UniRxでObservable.FromCoroutineというクラスがあることに気づきました。
こちらも結局内部的には上記のメソッドを利用しているようですが、普段からUniRxを使っているのであれば使わない手はない。

ということで以下サンプルです。

続きを読む

スポンサーリンク