チュートリアル - PlayCanvasで作った3Dブラウザゲームにリッチな演出を追加する-3

ここで紹介するのは、PlayCanvasの３Dハンズオン用のチュートリアル資料です。
[**"チュートリアル - PlayCanvasで作った3Dブラウザゲームにリッチな演出を追加する"**](https://support.playcanvas.jp/hc/ja/sections/360006055613-%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB-PlayCanvas%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%9F3D%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%82%B2%E3%83%BC%E3%83%A0%E3%81%AB%E3%83%AA%E3%83%83%E3%83%81%E3%81%AA%E6%BC%94%E5%87%BA%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B)からアクセスできます。
#ParticleSystemを適用し、エフェクトを作成する
今回のチュートリアルでは３つのタイプのエフェクトをParticleSystemを使用し、作成していきます。"常に発生し続けるタイプ"、"アクションの瞬間にだけ発生するタイプ"、"アニメーションを含んだタイプ"です。
パーティクルを発生させます。HIERARCHYから、関連付けしたいオブジェクトを選択した状態で、HIERARCHYの右側にある"＋"ボタンをクリックするとParticleSystemがあるので選択してください。ビューポート上の、オブジェクトの中心から、粒子状のパーティクルが発生していることが確認できます。
![PC_material_8_8 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/1ed9e9cb-36d1-34c1-cb4b-e681b81d2ce9.png)
##排気ガスを作成してみよう
![exhaust.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/367cef39-31bc-9485-30ce-55de625d0ee1.gif)
![smoke05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/4c2494ef-b2e2-8318-e8e9-9a4f0ab7702b.png)
 HIERALCHYから、tank内に格納されている"tank_cater"を選択した状態で、HIERALCHYの右横にある"+"ボタンをクリックし、"Particle System"を選択してください。
##位置の調整
![position.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/5be2fc4e-9e0b-fd6d-8272-45653ee6e6c4.png)
tank_caterの中心点に発生しているパーティクルを排気口のある位置に移動します。左上の"矢印十字"を選択し、ビューポート上で移動調整します。
![position2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/e3c25a53-8a90-ee9f-feaf-f25711f16947.png)
または、ENTITY内のPositionのXYZ値に数値入力で移動させます。
X :**-1.3** / Y :**5.3** / Z :**7**
##常に発生し続ける煙を作成します。
まずはパーティクルの**ParticleCount**(発生個数)、**Lifetime**(発生から消滅までの時間)などの設定です。

ParticleCount :**1000**

Lifetime :**2**

Emission Rate :**From0.01/To0.0**

ColorMapに"smoke.png"を適用することで粒子状が煙のテクスチャへ変更されます。また、アルファ(背景色が透過100%)を持っている場合、透過されます。
![exhaust02_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/f1d6cda6-2aeb-885b-9245-a07eb310705e.png)
![colormap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/f37bf294-830f-ce52-239f-107a79976f3b.png)
![texture6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/82748be1-e196-5abb-12f4-6f1e527e0a37.png)
ASSETS欄のtextureフォルダ内にある"smoke_1.png"をENTITYのColorMapスロットルにドラッグ＆ドロップし、適用させます。
##グラフエディタの使い方
グラフエディタを使用し、発生する位置や、移動する方向、速度、スケール、カラー、透過を調整していきます。また、"Randomize"にチェックを入れると指定した範囲内でランダム化します。
![GraphEditor_gif_001.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/9e9cc524-ee53-b008-f45a-bf29b9d829f0.gif)
グラフエディタの操作は上記の通りです。

●左クリックでポイントの移動と追加
●ポイント上で右クリックでポイント削除
●ライン外で右クリック＆ドラッグでグラフ全体の移動
●ホイールでスケールの拡大縮小です。

##Local Velocity
![exhaust03_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/f48c9ec4-7481-ab93-7faa-fc6cb49e4552.png)
パーティクルの発生ポイントから、進む方向を指定できます。Yで上下、Zで前後、Xで右左。今回の排気ガスの様なエフェクトは排管から勢い良く出る煙なので、YとZを上記の様に設定します。

X : Time **0.0** /Value **0.0**
Y : Time **0.0** /Value **0.0** , Time **0.793** /Value **0.0** , Time **1.0** /Value **3.387**
Z : Time **0.0** /Value **0.0** , Time **0.716** /Value **5.0** , Time **1.0** /Value **0.3**
##発生範囲の再調整
![particle_scale.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/b55a3c7e-4d76-d89c-b593-7f9b8dd9ba39.gif)
Lifetimeの値に合わせて発生範囲が決まりますが、LocalVelocityで移動方向の値を入れると発生範囲外へパーティクルが出てしまいます。この時パーティクルはLifetimeが終了するまで飛ぶので、逆側から出てきてしまいます。
回避方法としては、一旦Lifetimeに設定した数値以外を入力します。そうすると、移動方向を考慮した発生範囲に変更されます。
##Velocity
![exhaust03_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/d255f388-9c13-d7b4-0119-779d826f6d9e.png)
パーティクルの発生ポイントから0.0~1.0の間で移動方向を指定できます。マイナス値を指定すると原点へ戻ろうとする力が働きます。"Randomize"にチェックを入れてパーティクルY、Z方向に移動していくパーティクルの速度と方向をランダム化します。

X : Time **0.0** /Value **-2.0** , Time **0.0** /Value **2.0**
Y : Time **0.0** /Value **0.0** , Time **1.0** /Value **1.8**, Time **1.0** /Value **11.0**
Z : Time **0.0** /Value **0.0** , Time **0.43** /Value **10.0** , Time **1.0** /Value **-8.0**
##Radial Speed
![new_radial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/60c263aa-1d2a-a95b-e532-e655c7997f15.png)
パーティクル全体の速度と方向を設定できます。プラス値でより遠くへ加速していきます。逆にマイナス値に設定すると原点へ戻っていく力が働きます。このパーティクルでは速度が徐々にゆっくりとなるように指定します。

R : Time **0.0**/Value **-5.0** , Time **0.6** /Value **-3.5** , Time **1.0** /Value **1.9**
##Rotaition Speed
![exhaust03_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/58584bee-101b-4058-1e94-9fe06db5ceb7.png)
パーティクルが発生してから消滅するまでの間の回転を指定できます。煙の様なテクスチャマップを使用している場合、回転値を指定しないと固定された状態のテクスチャが飛んでいきます。

Angle :Time **0.0** /Value **0.0** , Time **0.2**/Value **405.0**
##Scale
![exhaust03_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/b5121564-784a-cac3-0ea3-a06b823a8fed.png)
パーティクルが発生してから消滅するまでの間のスケール(大きさ)を指定します。

Scale : Time **0.0** /Value **0.0** , Time **0.5** /Value **0.58** , Time **1.0** /Value **0.85**
##Color
![exhaust_color.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/1bd2f3b2-48de-2414-7a1a-6559790b0264.png)
パーティクルの発生から消滅までの間のカラー変化を指定できます。
##Opacity
![exhaust03_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/11717834-7ed0-e427-8af0-ac22c4c9e68f.png)
パーティクルの透過度を指定できます。

Opacity : Time **0.0** /Value **0.13** , Time **0.25**/Value **0.13** , Time **1.0**/Value **0.0**
##Duplication(複製)
![dupricate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/8fa111c5-fe16-0de7-b41b-8e54502fb3e7.png)
HIERARCHYの右側"Duplicate Entity"をクリックし、パーティクルを複製します。同じ位置に複製されるので、位置を調整します。
X : **1.2** /Y : **5.3** /Z : **7**]
#砲撃の煙を作成しよう
![smoke.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/c6149a5b-e055-9861-3b91-f789ff450b58.gif)
![smoke4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/d043acde-6bab-2985-e45d-987c7e82d3bb.png)
HIERALCHYからtank/tank_cater/tank_cannonの中にある"pounding_smoke"を選択してください。
##砲撃の瞬間に発生するエフェクトを作成していきます
![smoke_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/82e87fae-7ac6-fd01-e9ab-b82d5c5aeacd.png)
![smoke_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/fdb31669-c079-e0d0-8105-5ebe7d39a3b4.png)
Particle Count : **50**
Lifetime : **2**
Emission Rate : From **0** To **0** 

Emission Rateでパーティクルの発生が永続的か、瞬間的かを指定します。砲撃の瞬間のみ発生させたいので、Emission Rateは、From **0** To **0**にします。 
##Local Velocity
![smoke3_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/545a98bf-4a82-ae50-89e7-8c41d1f36cff.png)

z軸方向に広がりながら移動するように指定します。

X : Time **0.0** /Value **0.0**
Y : Time **0.0** /Value **0.0**
Z : Time **0.0** /Value **-2.75** , Time **0.52** /Value **2.81** , Time **0.9** /Value **4.62**
##Velocity
![smoke3_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/56692230-3e7f-2f71-dbc7-d51cc4829acf.png)
+z軸方向にある程度進み、ほんの少しだけ-z軸へ戻る動き。

X : Time **0.0** /Value **0.0**
Y : Time **0.0** /Value **0.0**
Z : Time **0.0** /Value **-13.0** , Time **0.37** /Value **7.5** , Time **1.0** /Value **1.0**
##Radial Speed
![smoke3_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/bfb55bad-b85e-a92b-efde-e2a290659f69.png)
パーティクルの移動速度と方向を発生から徐々にランダム＆ゆっくりにする。

R : Time **0.0** /Value **14.5** , Time **0.5** /Value **9.0** , Time **0.5** /Value **3.0**
##Rotation Speed
![smoke3_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/b2839c57-987e-9e6e-e72c-84c4df8ae3a6.png)
パーティクル発生時に+180°回転角がある状態から、パーティクル終了時までに-180°まで回転して終了します。

Angle : Time **0.0** /Value **180.0** , Time **1.0** /Value **-180.0**
##Scale
![smoke03_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/8ac6f2e3-b20a-6ece-d363-0186b18414e6.png)
スケール値０からTime0.077秒までの間で、スケール値+３へ拡大させています。

Scale : Time **0.0** /Value **0.9** , Time **0.077** /Value **3.0**
##Opacity
![smoke03_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/cc4b5d90-3310-271b-5f89-9a7280981c44.png)
透過率１からTime0.537までの間で、透過率０へ変化するようにしています。

Opacity : Time **0.0** /Value **1.0** , Time **0.18** /Value **0.2** , Time **0.53** /Value **0.0**
##Loopを停止させる
![loop1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/0d2933a6-0848-2af0-b180-a852b61464f1.png)
砲撃のアクション時のみ再生されるように、Loopのチェックを外し、繰り返さない状態にします。
#電撃を作成しよう
![spark.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/5efb5321-a7db-5c2d-a780-6480bec674d2.gif)
![spark04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/7f93f6d1-eb30-0c68-ce28-51c0ad2e07f1.png)
HIERALCHYからlandscape/UFOの中の"UFO_Spark"を選択してください。
##スパークするエフェクトを作成します。
![spark01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/e93500be-5848-96b0-607b-8a84427c550e.png)
![spark02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/4823511b-3442-45b3-d784-6dad1ddf2916.png)
Particle Count : **100**
Lifetime : **1**
Emission Rate : From **0.1** To **0**
Intensity : **10**
Emitter shape "**Sphere**"
Emitter Radius : **5**
Emitter Radius inner : **8**

Emitter shapeで"Sphere"を指定し、球状の空間内でエフェクトをランダムに発生させます。
##Color Map
発生するパーティクルをアニメーションさせたい時は、Color Mapに複数の画像(透過情報を持った)を並べたスプライトシート画像を指定します。
![spark.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/7bc78217-4ae2-b214-f15a-dd0255085f04.png)
Map Tiles : x: **3** , y: **3**
Frame Count : **6**
Animation : **10**
テクスチャは**2のn乗pixel**で作成することでタイリングが正確に行われます。
MAp TilesはX*Yのタイリング数です。
Frame Countはテクスチャ内にあるタイリングされた画像を何枚描画するかを指定します。
Animationは画像の再生速度です。
##Local Velocity
![new_velocity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/923b700a-6ca1-1572-9f8f-154b84cc2ac7.png)
X : Time **0.0** /Value **1.3** , Time **0.0** /Value **-1.3**
Y : Time **0.0** /Value **0.3** , Time **0.0** /Value **-0.3**
Z : Time **0.0** /Value **1.5** , Time **0.0** /Value **-1.5**
##Velocity
![new_velocity2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/bcef265d-f0a9-9188-fb5b-d5837d0cc133.png)
X : Time **0.0** /Value **3.5** , Time **0.0** /Value **-3.5**
Y : Time **0.0** /Value **3.0** , Time **0.0** /Value **-3.0**
Z : Time **0.0** /Value **3.0** , Time **0.0** /Value **-3.0**
##Radial Speed
![new_scale.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/ab8a2bfb-ea96-0c3d-42fd-8d1184c0119a.png)
パーティクルの進む移動速度と方向を+方向～-方向～+方向へと変化させています。

 R : Time **0.0** /Value **4.0** , Time **0.5** /Value **-23.0** , Time **1.0** /Value **13.0**
##Rotation Speed
![new_rotaitionspeed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/aa346c91-6f46-cc2a-41a4-346a9d4504fe.png)
Angle : Time **0.0** /Value **180.0** , Time **1.0** /Value **-180.0**
##Scale
![spark_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/b3d52bc3-6553-ddf1-7810-a7c1ef908778.png)
パーティクル発生時、ランダムな大きさから徐々に小さくしています。

Scale : Time **0.0** /Value **3.0** , Time **0.0** /Value **6.0** , Time **0.65** /Value **1.0** , Time **0.65** /Value **3.0** , Time **1.0** /Value **0.0**
##Opacity
![spark_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/37894916-73c5-928b-0339-5e084efceb80.png)
パーティクル発生時から徐々に透過率を上げ、透明にしています。

 Opacity : Time **0.0** /Value **0.5** , Time **1.0** /Value **0.0** , Time **1.0** /Value **0.2**
---
これで、PlayCanvasのParticl Systemを利用したエフェクトの作成は終了です。標準機能でもかなりの事ができますので、色々と試してみて下さい:thumbsup_tone2: