2014年8月12日火曜日

FXMakerことはじめ

Unity アセット真夏のアドベントカレンダー 2014 Summer!
こちら8/12の担当をさせて頂くことになりました。
昨日の記事はmohammedariさんのVRで女の子に歯磨きするまでにやったことでした。

先日のアセットまみれのLT大会ではなんだこれ of the Todayを担当し、
便利でも有効でもないアセットを紹介しましたが今回はこちら

FXMakerを紹介したいとおもいます。

 FXMakerとは?

FXMakerとは簡単に言ってしまえばエフェクト作成ツールです。
値段が高いためかネット上を検索してもあまり情報はなく、使われているイメージは薄いですがとんでもなく作り込まれたGUIなどが光るアセットです。

肝心のエフェクトについてですが現在主流のShurikenに加えてLegacyなシステムにも対応しており、それらをより直感的に編集しやすくなっています。
また、汎用的なコンポーネントも複数含まれております。例えば
NCCurveAnimation
こちらでは基本的なTransformやColorなどのパラメータをカーブで指定することができるコンポーネントです。
ほかにもNcDuplicatorやNcAutoDestructなどなんとなくこう使えばいいのでは?ってものが用意されています。

エフェクトを作成するまで

FxMakerには編集用の専用シーンが存在します。
アセットをインポート後 IGSoft_Tools > sceneFXMaker のシーンを開き、実行してください



 すると

こんな感じのシーンが表示されます。
このシーンでエフェクトの編集を行います。

とりあえずエフェクトを出す

画面上部のビューではエフェクト作成用のProjectFolderを設定することができます。
ここではProjectFolderとGroupでエフェクトを整理することができます。
今回は新しく作成するので 1Project の Group1 を使用します。

UnityのProjectとしては IGSoft_Resources/Projects/1Project/Group1のフォルダに今後作業したものが保存されるようになります。

続いて画面左のPrefabListのビューを見てください。
ここでは先ほど指定したProject/Groupのフォルダに入っているエフェクト一覧が表示されます。今回は新規のものになるので空になっています。
新しいエフェクトを作成するには左上のNewボタンを押します。


するとこのようなウインドウが出てくるので、ここでテンプレートを指定できます。
 今回はEmptyを指定してください。

今度は画面右側のProjectHierarchyビューを確認してください。このビューはUnityでいうHierarchyビューとInspectorの合体したビューになります。今回は新規でEmptyなエフェクトがあることが確認できると思います。
 では、NewEffectの右にある [P] のボタンをクリックしてみましょう。
すると
 上のようなウインドウが表示されるはずです。ここでは現在FXMakerが管理しているエフェクトの一覧を参照することができ、先ほどのNewEffectに追加することができます。
試しに一つ選択してみましょう。

画面中央に選択したエフェクトが表示されることが確認できると思います。先ほどのウインドウは下部にあるCloseボタンで閉じてください。

なんとなく炎魔法っぽいエフェクトを作る

とりあえず基本的な操作はここまでで、実際にエフェクトを作成しましょう。
それではRPGでつかえる炎魔法のようなエフェクトを作成してみましょう
今回のエフェクトはFXMakerのサンプルを組み合わせるだけで作成することができます。
まずは先ほどの手順でEmptyを作成します。ちなみに


こちらのテキストボックスで名前を変更できます。(ちなみにテキストボックスの挙動に癖があるので注意してください)
今回はFireMagicにしました。続けてPrefabHierarchyビューから[P]を押し、EffectSample/Sampleのground13を選択します
何となく魔法陣のようなエフェクトが表示されるはずです。
PrefabHierarchyを見ると

このような構造になっていると思います。
続けてFireMagicの [E] ボタンを押してください。
このようなウインドウが表示されます。ここでは先ほど説明したスクリプトなどのコンポーネントをアタッチすることができます。
今回はNcEffectのNcAttachPrefabを選択し、Add Componentボタンを押してください。
NcAttachPrefabは既に作成されたエフェクトを実行時にInstantiateするコンポーネントです
FireMagicにTransformに加えて新たにNcAttachPrefabのコンポーネントが追加されていることが確認できるはずです。ここでNcAttachPrefabをクリックしUnityのInspectorを確認してみましょう、いくつか設定できるパラメータがあると思います。
とりあえずパラメータは弄らずに下部にある SelectPrefab ボタンを押します。プレハブ一覧が表示されると思うので、今回は EffectSample/Sample の explosion15 を選択しましょう。
すると目標のエフェクトに近いものが表示されるはずです。ですが



このままでは魔法陣と炎のエフェクトが同時に作られてしまいちょっと見た目がダサくなってしまっています。今回は炎のエフェクトを遅れて発生させましょう。
NcAttachPrefabを選択しInspectorを確認、fDelayTimeというパラメータがあるはずです。
これは名前の通りディレイをかけられるパラメータで、今回は0.3を指定しました。すると


いい感じのエフェクトができたと思います。
ゲーム中に組み込んでみる
ほかにもこんな感じに




まとめ

FXMakerを使用すればとりあえずそれっぽいエフェクトが簡単に作れます。
元々入っているサンプルでも面白いものが作れるのでちょっと高いですが試してみる価値はありそうです。今回紹介していませんが作成したエフェクトをスプライトアニメーションに変換したりスライダーによるエフェクトスピードの調整などまだまだたくさんの機能がありますので、そちらについては後日機会があれば...

明日はやまださんによる「ユニティちゃんにAssetStoreで販売しているモーションをアタッチしよう!」となります。

2014年2月23日日曜日

Unityの謎Editor拡張

ふとAssetStoreを見て回ってたときにみつけたアセットがこちら
StressBallというアセットらしい。
アセットをインポート後WindowタブのPixelplacementからStressBallを選択で上の様なウィンドウがひらく。
これで出来ることというと左クリックでこのつやつやなボールを掴んで投げることが出来るらしい。ただそれだけのアセットなのだが、どうやらアセットの説明をみているとLightMapのベイク中などにもこのウィンドウで遊んでねということらしい。
楽しい...?

つづいてはこちら


一見こちら、宇宙を背景にしたチープなゲームみえるが、これもEditor拡張である。
ルールはどうやらマウスを追っかけるロケットをうまく操り、プレイヤーを追いかけるロケットを回避するというものらしい。
また、ゲーム途中で現れる白い丸(Bombらしい)をとると画面内の敵を一掃出来るようだ。
これがなかなか難しくイイカンジに暇が潰れる。

意外と楽しい...

2014年2月19日水曜日

InspectorのLock機能について

UnityのInspectorのLock機能つかってますか?
ということで知っていると超便利なLock機能について紹介します。
UnityのViewのタブ部分を右クリックでWindowを追加出来るのはご存知だと思います。


 こうするとインスペクタを追加できるので縦に並べます。

この状態でいろいろ名物を選択すると上下のインスペクタそれぞれに同じ物が表示されます。Normal表示とDebug表示を同時にみたいときにはこのままでも使えますが、今回はLock機能についてなのでLockしてみましょう。

インスペクタの右上の鍵マークをクリックすることでアイコンの鍵がかかり、Lockされます。


LockされたインスペクタはUnity上で別のオブジェクトを選択しても、Lockした時のオブジェクトを表示し続けます。

登録されている複数のPrefabを順番に確認したい場合等にLock機能を使うことでスムーズに確認を行うことが出来ます。


2012年8月14日火曜日

EditorScript入門

最近忙しくて記事を書くのがサボり気味です。
今回はお酒を飲みながらEditor拡張について扱います。

Unity大きな特徴としてEditor自身を簡単に拡張できるところがあります。普段利用している際にも細かいところに手が届かず、ちょっと困ることがあると思います。
そういった場合にEditor拡張を行うことでより自由自在にUnityを活用することが出来ます。

まずEditor拡張を行う際には専用のスクリプトを用意します。Projectタブの中にEditorフォルダを用意してください。その中に入れたスクリプトがEditor拡張用のスクリプトとして認識されます。注意すべきは、Projectのなかにあればどのような階層にあったとしてもEditorフォルダの中にあるものはすべてEditor拡張用として見なされてしまうという点です。Editorフォルダの中に入っているスクリプトに関しては実際にゲームをビルドする際には含まれません。そのため、ゲームの進行に必要なスクリプトはEditorフォルダに入れないようにしましょう。

Editor拡張を行う際にはUnityEditorの名前空間を指定する必要があります。そのためC#の場合は
using UnityEditor
とスクリプトのはじめに記述します。
そのごの細かい部分に関しては以下のスクショにて



こんな感じです。
具体的に何が出来るスクリプトかというと、シーン内にあるMeshの純粋な頂点数を計算しています。
Editor拡張を行う際にはEditorWindowなどのクラスを基底クラスとして拡張していきます。そして、主にOnGUIを利用してWindowの中のボタンやテキストフィールドを用意します。その際には今回利用しているGUILayoutクラスを利用することで綺麗に並べることが可能となります。

今回は利用していませんが、Assetの管理を行う際にはファイル操作の知識があると便利です。特定の形式のデータだけを抽出してソートする等、様々な使い方があります。


また、今回このスクリプトを作成した際に気がついたのはUnityのGameWindowにあるStatsで表示されるVertsは純粋な頂点数ではないということがわかりました。
具体的にはMesh自体が持っている超点数よりも2倍近く表示されているということがわかりました。
試しにCube(8頂点) のみを画面内においたところ頂点数が16と表示されていました。
これに関しては今後調査する必要がありそうです。



2012年8月9日木曜日

パーティクルシステムShuriken

パーティクルシステムがShurikenに変わってからどうやって設定したら思い通りのパーティクルが作れるか悩んでいる人も多いみたいです。そもそも、項目が分けわからんという人も結構いるみたいですが...
意外と簡単だったりします。




上から順番に確認していきましょう。
ParticleSystemをクリックするとまずは基本となる部分が出てきます。どの要素も名前で大体判別できると思います。重要なのは、値を入力できるフィールドの右はじに下向きの三角形がついているものです。三角を押すことでわかりますが、フィールドの値をカーブやランダムな値等柔軟に入力できるようになります。これに関しては今後の部分でも非常に良く使用する部分ではあります。

・Emission
エミッションとは排出のことを指し示しています。すなわち、パーティクルの要素一つ一つがどのように発射されるかを定義する部分です。基本はTimeで値を設定するだけで良いでしょう。

・Shape
パーティクルがどのような形で排出されるかを設定することが出来ます。デフォルトはCornすなわち上に向かって開いている三角錐みたいな感じになっています。そのため、初期のパーティクルが上向きに広がるようになっています。ほかにはBoxやSphereなどの形状が設定でき、どれもその形に添って発出します。

・ 〜〜 over LifeTime系
パーティクルのライフタイムに応じて様々な値を変更することができます。

・〜〜 over Speed
上記と同様にスピードに応じて変更が出来ます。

・Collision
Colliderの衝突判定を設定すること可能です。設定したTransform情報(座標、回転)から面を作り、発生したパーティクルはそれに反射するようになります。

・SubEmitter
パーティクルの発生に伴い更に別のパーティクルを発生させることができます。Birth(発生時)、Death(消失時)、Collision(衝突時)それぞれに対して設定できます。

・TextureSheetAnimation
テクスチャを分割してアニメーションさせます。XおよびYで分割数を、Animationで全体を巡るのか一つの軸(XもしくはY)のみ巡るのか、Cyclesでスクロールする回数を設定できます。

・Renderer
パーティクルで使用するマテリアル等を設定します。パーティクルの表示方法や最大サイズ等を設定することが可能です。

こんな感じです。
正直使ってみれば意外とわかりやすいことがわかります。

2012年8月7日火曜日

FGJに参加してきました

つい昨日まで福島にいました。
もちろんFGJに参加するためです。

今回でゲームジャムは三回目でしたが、制限時間30時間はなかなかにしんどかったです。企画やコンセプトは早い段階で決まりましたが、思うように実装が進まないこともあります。
特に今回はUnityにおいて2Dゲームを作成するということでUni2Dを使用しました。
こいつは、作成した画像データからコリジョンを自動で生成してくれるというなかなかの優れもので、Unityで2Dの物理系ゲームを作成するならば見ておいても損はなさそうです。

しかし、こいつになかなかに振り回された部分もありました。
テクスチャからコリジョンを作成する際にプレハブを生成するのですが、どうやら自動でリソースを作成してしまうようでAssetServerを利用しているとコンフリクトしまくるということが発生しました。
直接的なダメージは無いものの、Updateするたびに毎回コンフリクトするのはなかなかに面倒です。また、今回はWebPlayer上での発表だったため問題なかったのですが、iOSやAndroid向けに使用するにはまだまだ重いということも聞きます。これらのことが解決されれば非常に強力なツールとして広まるのではないでしょうか。

ここでまたFGJの話に戻ります。
今回自分は3班に参加しました。主にプログラムとサウンドを扱いましたが、やはりまだまだスキルアップの余地があるなあとも思いました。また、今回初めてペアプログラミングを行ったのですが、なかなかにたのしかったです。バグを見つけるには十分な目の数があればいいとかなんとかそんな話もありますが、事実二人で一つの処理を考えれば意外としっかりとしたものができるようです。

次回のGGJではリーダーに立候補しようかなぁとも考えるこのごろです。

技術系の話はまた明日からつづきます。

2012年8月3日金曜日

マイクから音を取得して波形を描画する

今回はマイクから音を取得して波形を生成するプログラムを作成しました。その結果は


こんな感じになりました。

今回のソースは



こんな感じです。
音声の入力にはMicrophoneクラスを、波形の描画に関してはLineRendererを使用しています。PlayClip関数内のwhile文の中にあるマジックナンバーは主に波形の描画位置の調整を行っています。