Unity5で魔法陣を作ろう 基礎編 チュートリアル

お手軽魔法陣!
お手軽魔法陣!

Unityのパーティクルシステムは、設定項目が多いので項目を覚えるよりも、よくある仕組みを実際に作ってみながら覚えたほうが効率が良いです。今回は、パーティクルが螺旋で動く魔法陣を作成します。

仕組みは簡単

  • この魔法陣の仕組みは実は簡単です。
  • Worldの影響を受ける柱パーティクルを2つ用意する。
  • 魔法陣テクスチャをドロップして、魔法陣オブジェクトを作る。
  • 魔法陣オブジェクトの子要素として、柱パーティクルを配置する。
  • 魔法陣オブジェクトをアニメーションで回転させる。

作成チュートリアル

作成方法が分かったので実際に実装してみましょう。

magiccircle
Inkscapeで512×512で背景透過で作成したpng画像

 

プロジェクトの作成

まずは、ParticleSpiral02など適当な名前3D用プロジェクトを新規に作成します。そして、フォルダーをいくつか作成して、上記の画像などをTexturesフォルダーに配置します。上記魔法陣の画像は、背景透過のpng画像です。(このブログでは、透明の画像で魔法陣の線が白のため何も見えなくなるので、CSSを黒くしています。)

001

画像は、Texture TypeがTextureになっているので、[Sprite (2D and UI)]にして[Apply]で適用します。

002

Cubeを作成し、先ほどのMagicCircle画像をシーンにドロップします。

003

MagicCircleのRotationをx:90にして、Cubeの子要素にします。

004

色は、Sprite RendererコンポーネントのColorで変更できます。そもそも魔法陣の画像をライトグリーンにしてしまう方法などもあります。画像を白にしておくと、Unity側でいろんな色のパーティクルと組み合わせやすいです。

005

 

ぽわぽあしているパーティクルの作成

まずは魔法陣の近くのホタルのようなぽわぽあしたパーティクルを作成します。新たにParticle Systemを作成し、Particle Systemモジュールの各種値を変更します。

006

また、最後にフェードアウトするように小さく消えてほしいので、[Size over Lifetime](=生存期間中のサイズ)モジュールにチェックして、曲線を編集します。

007

実際に使ってみてもらえば分かりますが、ダブルクリックで点を新規に作成してそれを動かすことで曲線を動かせます。また右クリックから点の削除も可能です。

a07

この図の見方は、横軸が時間で、0.0から1.0で表現しています。つまり一番左がParticleSystem開始時で、一番右が終了時になります。縦軸はSizeを0.0から1.0で表しています。よって、上記曲線の場合は、開始時に1=100%の大きさで、終了時に、0=0%の大きさになるが、大きさは曲線の変化によって徐々に小さくなるようになります。

008

例えば、一番右の点を、縦軸の1.0に持ってくると、上記画像のように直線になります。この場合は、開始から終了まで、Sizeが1.0なので小さくなっていきません。実際に何回も試してみましょう。

a08
ぽわぽわパーティクルができた!

柱パーティクルの作成

010

Duration 放射する時間 1秒

Start Lifetime 生存期間 1秒

Start Speed 放射する速度 4

Simulation Spaceは、Worldに変更すると、移動したときにパーティクルが揺らぐようになります。魔法陣を回転させると、パーティクルも螺旋を描くようになります。

Emissonモジュールで、一度に放射する量を調整できます。Rate 100の場合は、一回に100個のパーティクルを放射します。

 

009

Shapeモジュールで、放射する形を変更します。初期設定では、コーン型(メガホンのような形や、傘のついた街灯)なので、Angle角度と、Radius半径を小さくして、棒状に放射するようにします。

最後に、[Size over lifetime]で、開始時のサイズを小さくし、途中大きくし、終了時に小さくするようにします。もう少し綺麗に変形すればろうそくの火のような感じにもできます。

これで柱パーティクルが1つ出来たので、コピーして位置を変更してもう1つ作ります。

011
テスト用にParticleSystemモジュールのLoopingをチェックして柱2つを表示

魔法陣を回転させる。

これはParticleSystemの仕組みではなく、単純なUnityのアニメーションです。

012

Animationビューを表示して、HierarchyからMagicCircleを選択すると、[Create]ボタンが表示されるので、これでアニメーションを作成します。

013

[Add Property]ボタンでRotationを選択して、1:00(終了時)を360の倍数にします。今回は360*2 = 720にしました。

014

これで、螺旋を描くパーティクルが作成できました。この時点でゲームをプレイしてみると、起動と同時にアニメーションが実行されるのが確認できます。最後にボタンをクリックしたときに発動するようにしてみましょう。

ボタンをクリックしたときに魔法を発動させる。

ボタンを押したときに、魔法陣を回転させて、パーティクルを一斉に起動したいのでC#スクリプトで制御します。これはMagicCircleオブジェクトの親のCubeに割り当てます。

016

ボタン作成

Hierarchyビューで右クリックして、[UI]->[Button]でボタンを作成します。

015

ボタンのクリック時にMagicCircleスクリプトのDoMagicが実行されるようにします。

017

アニメーション遷移の修正

018
状態遷移の完成図

まだ、Waitアニメーションがないため新規に作成します。これは何もしないアニメーションで、”DoMagic”トリガーが実行されるまでここで待機するために用意します。作り方は簡単で、MagicCircleオブジェクトをHierarchyビューで選択して、[Create New Clip…]で作成します。以下のGifは既にWaitアニメーションを作成した後に、キャプチャーしたので、リストにRotate,Wait,Create New Clip…と並んでいますが、まだ作っていない場合は、リストにはRotate, Create New Clip…となっています。

a09

[Add Property]でPositionなどなんでもよいので選択して追加します。ただ待機用に用意したので値は変更しません。

019

トリガー作成

a10

トリガーは銃の引き金と同じで、これを実行するとアニメーションを実行するようにするフラグにします。C#スクリプトでは、GetComponent<Animator>().SetTrigger(“トリガー名”);のようにすれば、スクリプトから操作できます。そのためボタンを押したタイミングでこのスクリプトを実行すればアニメーションを動かせます。

上記のGifでは、新規にHelloTriggerトリガーを作成しましたが、DoMagicトリガーを新規作成すればよいです。

[Set as Layout Default State]により、起動時にWaitアニメーションが呼ばれて何もアニメーションしないようにします。

a11

あとは、Waitステート、Rotateステートを右クリックして[Make Transition]を選択すると、線を引けるようになるので、上記のようにRotateからWait,WaitからRotateに遷移できるようにします。

Wait->Rotate Transitions

021

[Has Exit Time]をチェックしないと、Waitアニメーションの終了を待たずにRotateへ遷移します。またConditionsにDoMagicトリガーを指定し、DoMagicトリガーが有効になったとき、Rotateアニメーションへ遷移します。

Rotate->Wait Transitions

022

こちらは特に細かい指定は合ってもなくてもよいです。

最後に、すべてのParticle SystemのParticleモジュールの[Play On Awake*]項目のチェックを外します。これは、最初に外しておくべきですが、このチュートリアルの画像では外すのを忘れてしましました。これを外しておかないと、ゲーム開始時に必ずパーティクルが実行されてしまいます。

完成

a12

このプロジェクトの配布

Unity5.4

http://hajimete-program.com/games/ParticleSpiral.zip

エクスプローラーからMain.unityをクリックして、Unityを起動すれば、Mainシーンが表示されます。またこの記事と箱となり、プロジェクトのボタンの位置やボタン名など若干変更しています。

 

 

 

 

unity5で魔法陣を作ろう-xoctomanx編

Unity5で魔法陣を作ろう xOctoManx編

YoutubeでxOctoManxさんが、ヒーリングスペルのパーティクルの作り方を解説している動画をアップロードしています。前から気になっていたので試してみました。これを見るまで、パーティクルで螺旋を作る方法が分かりませんでしたが、アニメーションを使って、親のオブジェクトを回転させているだけでした。

パーティクルはシンプル

003

ParticleSystemコンポーネントはシンプルで、ポイントは、Simulation SpaceをWorldにしているところだけです。これをLocalからWorldにすると、このオブジェクトが移動したり、回転すると、その移動によってパーティクルが揺れることになります。

螺旋はアニメーションで行う

001

さきほどの設定で、ParticleSystemのSimulation SpaceをWorldにしました。親となる魔法陣オブジェクトのTransform.rotationを使って回転させると、パーティクルが揺れるようになります。そのためボタンクリックなど魔法発動時に魔法陣を回転させると、螺旋状態になります。

螺旋は、魔法陣が回転しているだけ!
螺旋は、魔法陣が回転しているだけ!

基本の仕組みはこれだけで、あとはアニメーションで最初は魔法陣とパーティクルが表示されていない状態にして、0.05秒後にアルファチャンネルを100%にするなどのアニメーションを調節していきます。また、今回のパーティクルは、螺旋が2本と、星のパーティクルで、合計3つのパーティクルになります。

SpriteRendererを使わないで魔法陣を表示する方法

2Dの場合などはSpriteRendererを使ってイメージを表示しますが、MaterialをParticles/Alpha Blendedなどにして、テクスチャーを指定します。この場合はMaterialをPlaneに割り当てると、透明部分はそのまま透明になり、色が付いた部分は表示されるようになります。

002

 

このプロジェクトの配布

Unity5.4

http://hajimete-program.com/games/Unity 5 Tutorial Particle Systems 02 – Healing Spell Effect (xOctoManx).zip

 

まとめ

このチュートリアルをやるまでは、パーティクルで螺旋をどうやって実現するのか不思議でしたが実際はアニメーションを使っているだけでした。また一見複雑なパーティクル表現は、複数のParticleSystemを使っていることもわかりました。