Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【アセット紹介】Crest Ocean System URP で海を作る【Unity】

今回はアセットの紹介をしていきます。
紹介するのはCrest Ocean System URP
高度な海洋シミュレーションアセットです。

f:id:Raspberly:20210720005913p:plain

f:id:Raspberly:20210720020351p:plain




 

お得なセール情報

現在アセットストアでは、サマーセールが開催中!
7週間にわたってテーマ別にセール対象アセットが変わります!

 

今週のテーマはファンタジーゲーム開発向けアセットです。
詳しくは↓のバナーからどうぞ!

f:id:Raspberly:20210719223803j:plain

今回紹介する「Crest Ocean System URP」もセール対象です!

 

セールのスケジュール

  • 1週目:低ポリゲーム-2021年6月22日-6月28日
  • 2週目:2Dゲーム-2021年6月29日-7月5日
  • 3週目:3Dゲーム-2021年7月6日-7月12日
  • 4週目:ファンタジーゲーム-2021年7月13日-7月19日
  • 5週目:SFゲーム-2021年7月20日-7月26日
  • 6週目:ドリームプロジェクト-2021年7月27日-8月9日

4週目の終了時間は日本時間で7月20日15:59までです。

blog.unity.com

 

 

 

どんなアセット?

とても高度な海洋シミュレーションアセットです。
波の表現、物理演算、水中エフェクトなど本格的な海を表現できます。

f:id:Raspberly:20210720003445g:plain

クレストは、PCおよびコンソールプラットフォームを対象とした、技術的に高度な機能豊富な海洋システムです。

 

ドキュメントはこちら

crest.readthedocs.io

 

注意点

Render Pipeline

URP専用アセットです。HDRP用は別売りになっています。
Built-inで使いたい場合はGithubで公開されているものを自由に使えます

github.com

対応プラットフォーム

PCとコンソールを対象にしたアセットです。
高機能なモバイル端末なら動くかもしれないようですが。

Compute Shader

ComputeShadersに依存したアセットです。
コンピューティング互換性のあるプラットフォームのみサポートしています(WebGLでは動かない)

対象プロジェクト

高度な水のシミュレーションを必要とするプロジェクトを対象にしています。
技術的設定・構成が必要なので、「手っ取り早く海を作りたい」といった場合には向いてません。

複数カメラの同時レンダリング

(現在)複数カメラの同時レンダリングをサポートしていません

 

 

 

 

 

開発環境

Unity 2020.3.14f1

Universal RP 1.5.1

Crest Ocean System URP ver4.12

 

 

 

 

インポートの確認

インポート前の準備

RenderPipelineAssetの設定

まずはRenderPipelineAssetを設定します。
これはレンダーパイプライン全体のグラフィックスを構成するアセットで、SRPでは必須です。

f:id:Raspberly:20210719145335p:plain

URPプロジェクトを作成した段階で自動的にセットされていますが、
Depth TextureとOpaqueTextureを有効にする必要があります。

f:id:Raspberly:20210719145430p:plain

Color Spaceの設定

ProjectSettingsからColorSpaceをLinearに設定します。

f:id:Raspberly:20210719150532p:plain

ここまでできたらアセットをインポートします。

 

デモシーンの確認

アセットインポート完了時はこんな感じです。
Crest-Examplesにデモシーンが含まれています。

f:id:Raspberly:20210719160737p:plain

BoatDev

ボートがあるシーンです。
プレイヤーが操作できるボートと、AIで走り回っているものがあります。

f:id:Raspberly:20210719232124g:plain

Main

シンプルなTerrainと海のシーン

f:id:Raspberly:20210719232219g:plain

PirateCove

海賊の入り江。島と船があります。

f:id:Raspberly:20210719232948g:plain

Whirlpool

ボートが渦潮に引き寄せられるシーン。

f:id:Raspberly:20210719233108g:plain

 

 

 

 

実際に試してみる

実際に海を作ってみます。
コンポーネントのパラメータについてはドキュメントをどうぞ。

海の作成

Materialの作成

OceanWater」という名前で新しいMaterialを作成します。(デフォルトのOceanマテリアルを使ってもいいですが)
ShaderはAssets/Crest/Crest/Shaders/Oceanを使用します。

f:id:Raspberly:20210717155839p:plain

Normal MapにはAssets/Crest/Crest/Textures/WaveNormals/WaveNormalsを割り当てます。

f:id:Raspberly:20210717160117p:plain

FoamのFoamにはAssets/Crest/Crest/Textures/Foam2を割り当てます。

f:id:Raspberly:20210717161639p:plain

CausticsにはAssets/Crest/Crest/Textures/Caustics/Caustics_tex_colorを割り当てます。

f:id:Raspberly:20210717161711p:plain

Oceanの作成

空のゲームオブジェクトを作成し名前を「Ocean」に変えます。
OceanにCrestOceanRendererコンポーネントをアタッチします。
Ocean ParamsにMaterialにOceanマテリアルが自動的に割り当てられていますが、
これを先ほど作ったOceanWaterマテリアルに差し替えます。

f:id:Raspberly:20210717160409p:plain

ゲームをプレイしてみると海ができているのが確認できます。

f:id:Raspberly:20210717160515p:plain

 

波を作る

海面はできたので波を発生させます。
空のゲームオブジェクトを作り名前を「OceanInput」に変えます。
OceanInputの子にさらに空のゲームオブジェクトを作り名前を「Waves」に変えます。

f:id:Raspberly:20210717163028p:plain

WavesにCrestShapeGerstnerBatchedコンポーネントをアタッチします。

f:id:Raspberly:20210717163047p:plain

ゲームを実行してみると海面が波打っているのが確認できます。

f:id:Raspberly:20210717175033g:plain

 

泡を発生させる

海面に泡を発生させます。
Projectビューの適当な所にCreateからFoamSimSettingsを作成します。

f:id:Raspberly:20210717163621p:plain

作成したらOceanRendererSimSettingsFoamに割り当てます。

f:id:Raspberly:20210717165558p:plain

 

これで海面に泡が発生します。

f:id:Raspberly:20210720001629g:plain

SimSettingsFoamのパラメータから泡の強さと範囲を変えるとよりわかりやすくなります。

f:id:Raspberly:20210717170228p:plain

 

動的な波の発生

オブジェクトの移動や回転に合わせて波が発生するようにしてみます。

マテリアルの作成

Assets/Crest/Crest/Shaders/OceanInputs/DynWavesObjectInteractionを使ったマテリアルを作成します。

f:id:Raspberly:20210719235911p:plain

 

オブジェクトの作成

波を発生させるコライダー専用オブジェクトを作成します。
今回はCapsuleを使います。名前を「WaterObjectInteraction」に変えておきます。

 

これにCrestObjectWaterInteractionコンポーネントCrestRegisterDynamicWavesInputコンポーネントをアタッチ。

f:id:Raspberly:20210720001554p:plain

このWaterObjectInteractionを動くオブジェクトの子オブジェクトにしておきます。

CrestOceanRendererの設定

CrestOceanRendererのCreateDynamicWaveSimにチェックを入れる

f:id:Raspberly:20210720002221p:plain


これでオブジェクトの動きに合わせて波が発生します。

f:id:Raspberly:20210720002629g:plain

 

 

 

オブジェクトを海に浮かべる

Cubeを浮かべてみます。

Cubeを作成し、RigidbodyCrestSimpleFloatingObjectをアタッチします。

f:id:Raspberly:20210717173803p:plain

これで完成です。簡単!
パラメータで浮力を調整できます。

f:id:Raspberly:20210720003445g:plain

 

 

 

 

まとめ

・Crest Ocean System URPを本格的な海を作ることができる

今回実際に作った部分はほんの一部です。
流れを制御したり、海の一部分だけ変化をつけたり、水中エフェクトをつけたりととても多機能なので、
ドキュメントやビデオチュートリアルを元にいろいろ遊んでみてください。

 

以上です。

 

 

参考資料

crest.readthedocs.io

www.youtube.com

www.youtube.com

www.youtube.com

 

HDRP版はこちら!

amaotolog.com

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【アセット紹介】Sensor Toolkit でNPCの視界を作ろう【Unity】

今回はアセットの紹介をしていきます。
紹介するのはSensor Toolkit
視界を簡単に作ることができるセンサーアセットです。

f:id:Raspberly:20210712034341p:plain

f:id:Raspberly:20210712030819p:plain

 

 

 

お得なセール情報

現在アセットストアでは、サマーセールが開催中!
7週間にわたってテーマ別にセール対象アセットが変わります!

 

今週のテーマは3Dゲーム開発向けアセットです。
詳しくは↓のバナーからどうぞ!

f:id:Raspberly:20210712030240j:plain

今回紹介する「Sensor Toolkit」もセール対象です!

 

セールのスケジュール

  • 1週目:低ポリゲーム-2021年6月22日-6月28日
  • 2週目:2Dゲーム-2021年6月29日-7月5日
  • 3週目:3Dゲーム-2021年7月6日-7月12日
  • 4週目:ファンタジーゲーム-2021年7月13日-7月19日
  • 5週目:SFゲーム-2021年7月20日-7月26日
  • 6週目:ドリームプロジェクト-2021年7月27日-8月9日

3週目の終了時間は日本時間で7月13日15:59までです。

blog.unity.com

 

どんなアセット?

レイキャストやコライダーを使って、
キャラクターの視界となるセンサーを簡単に作ることができるアセットです。
センサーだけでなく、視界に最適なコライダーもあります。

f:id:Raspberly:20210712025844g:plain

Sensor Toolkitは、ゲームオブジェクトに配置して、スクリプトやPlayMakerアクションと簡単に統合できる2Dおよび3Dセンサーコンポーネントのコレクションです。これは、レイキャストやトリガーコライダーなどのUnityの基本的なセンシング機能に加えて便利な抽象化ですが、多くの利点があります。軽量で高度な機能を備えており、幅広い問題に適用できます。

 

 

ドキュメントはこちら

www.micosmo.com

 

 

 

開発環境

Unity2020.1.7f1

Sensor Toolkit ver1.6.5

 

 

 

インポートの確認

アセットインポート完了時はこんな感じです。
メインとなるコンポーネントはトップに配置されています。

f:id:Raspberly:20200930021248p:plain

 

Examplesの中にデモシーンが含まれています。

f:id:Raspberly:20200930021340p:plain

Actionシーン

2つのチームに分かれたBotがお互いに戦いあっているシーン

f:id:Raspberly:20200930024734g:plain

Stelthシーン

WASDとマウスで操作するステルスゲーム
このアセットのイメージに一番合うかも。

f:id:Raspberly:20201006032441g:plain

 

 

 

 

主要コンポーネント

このアセットを使いこなすうえで重要なコンポーネントを紹介します。
パラメータはたくさんあるので重要なやつだけ。

FOVCollider

コーン状の視野を提供するコライダーコンポーネント。キャラクターの視野にぴったりです。
コーンはStart時にメッシュが動的に生成されます。

f:id:Raspberly:20210711224409p:plain

パラメータ

Length:視野の長さ

BaseSize:視野のサイズ(視野開始地点側の大きさ)

FOVAngle:視野の角度(横方向の角度)

ElevationAngle:視野の仰俯角(上下方向の角度)

Resolution:円弧の頂点の数(可能な限り少ない方がいいらしい)

f:id:Raspberly:20210712025638g:plain

FOV Colliderはセンサーコンポーネントではないのでこれ単体で探知などはできません。
TriggerSensorコンポーネントと併用しましょう。

 

 

センサーコンポーネントの共通機能

センサーはGameObjectを検知しリスト化します。センサーから離れたときにリストから削除されます。
検知時とセンサーから離れた時にイベントを発行します。

共通のパラメータ

センサーごとにちょっと違いはある

Ignore List:センサーで検出しないGameObjectのリスト。視線を遮ることはある

Enable Tag Filter:Trueにすると、TagFilterに含まれるオブジェクトのみ検知する

Detects On Layers:探知するオブジェクトのレイヤー。初期値Nothingなので注意

Detection Mode:検出モード。Rigid bodiesの場合Rigidbodyがないと無視される

Update Mode:Sensorの更新モード。毎フレームだったりインターバルを指定したり

Requires Line Of Sight:視線が通っているオブジェクトのみ検出する

Events:検知及び見失った時に呼ばれるイベントを設定

 

 

RangeSensor

Sphereのセンサーコンポ―ネント。範囲内のコライダーかRigidbodyを検出します。
一定間隔ごとに検出するほか、手動(任意のタイミング)で検出させることも可能。
(内部的にはPhysics.OverlapSphereを使用しています)

f:id:Raspberly:20210712013944p:plain

パラメータ

Sensor RangeSphereのサイズ

f:id:Raspberly:20210712010426p:plain

 

 

 

RaySensor

Rayを使うセンサーコンポーネント
Rayの長さや検出するレイヤー、それを遮るレイヤーにより構成されます。
RauCastHitを使うため、接触点や表面法線、ブロックしたコライダーを取得できます。

f:id:Raspberly:20210712013911p:plain

パラメータ

Length:Rayの長さ

Radius:Rayの半径、0より大きい場合spherecastを使用します

Direction:Rayの方向

World Space:Directionの値がWorldSpaceかLocalSpaceか

f:id:Raspberly:20210712025723g:plain

 

 

SteeringRig

ステアリングベクトルを計算するコンポーネントです。
障害物をナビゲートするのに使われます。子オブジェクトにRaySensorを配置して使いますが、
SensorToolkit / SteeringRigPrefabsにすぐに使えるPrefabが用意されています。

f:id:Raspberly:20210712013130p:plain

 

 

Trigger Sensor

isTriggerなコライダーを使うセンサーコンポーネントです。(ColliderとRigidbodyが必須)
一般的によく使われる検出方法ですが、設定は慎重に行う必要があります。
OnTriggerEnterとOnTriggerExitで検出を行いますが不要なものを検出する可能性もあります。

f:id:Raspberly:20210712014346p:plain

 

BoxColliderなど自前のColliderで探知できます。
前述のFOV Colliderと併用すると簡単に視界を作成できます。

f:id:Raspberly:20210712014809p:plain

 

 

 

 

 

 

実際に試してみる

FOV ColliderとTrigger Sensorでキャラクターの視界を作ってみます。

 

キャラクターの用意

お馴染みSDユニティちゃんを使います。これはなんでもいいです。

f:id:Raspberly:20210712025523p:plain

 

 

センサーコンポーネントの設定

ユニティちゃんの子オブジェクトに空のゲームオブジェクトを作成し、
FOV ColliderTriggerSensorコンポーネントをアタッチします。パラメータはこんな感じです。

f:id:Raspberly:20210712031431p:plain

 

UIの作成

発見状態かどうかわかりやすいようUIを作成します。これはなんでもいいです。

f:id:Raspberly:20210712032030p:plain

 

スクリプトの作成

以下のSensorTestを作成します。
探知時と見失った時に呼ばれる2つのメソッドを定義しています。
やっていることはそれぞれUIをオンオフするだけです。


TriggerSensorの設定でPlayerタグ以外のオブジェクトは探知しないようにしているので、
オブジェクトの識別処理を入れる必要はありません。(とても便利)

using UnityEngine;

public class SensorTest : MonoBehaviour
{
    public GameObject m_DetectIcon;

    public void Detect(GameObject _gameObject, SensorToolkit.Sensor _sensor)
    {
        m_DetectIcon.SetActive(true);
    }

    public void Lost (GameObject _gameObject, SensorToolkit.Sensor _sensor)
    {
        m_DetectIcon.SetActive(false);
    }
}

このスクリプトを、先ほど作った空のゲームオブジェクトなど適当な場所にアタッチします。

 

 

イベントの設定

TriggerSensorコンポーネントのEventにSensorTestのメソッドを登録します。

f:id:Raspberly:20210712032500p:plain

 

 

これで完成!
FOV Colliderの範囲内に入ると探知されているのがわかります。
壁の遮られたり、範囲内に出ると見失っていますね。

f:id:Raspberly:20210712025844g:plain





 

まとめ

・Sensor Toolkitを使うとキャラクターの視界が簡単に実装できる
・4種類のセンサーコンポーネントと視界用のColliderが用意されている


このような視界システムは自作している方が多いと思います。
Colliderを使って開発するのが一般的(Unityのチュートリアルなど)ですが、
視界用のFOV Colliderが用意されているのがとてもうれしいですね。

センサーコンポーネントも視点が通っているかの判定や、
タグ・レイヤーによる探知範囲の設定など便利な機能がそろっているので、
ステルスゲームや戦闘ゲームを開発している方にオススメのアセットです。

 

アセットストアでも人気順上位です!評価も高い!

 

以上です。 

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【アセット紹介】2DxFX: 2D Sprite FXでスプライトにエフェクトをつける【Unity】

今回はアセットの紹介をしていきます。
紹介するのは2DxFX: 2D Sprite FX
SpriteRendererやImageにエフェクトを追加するアセットです。

f:id:Raspberly:20210705223510p:plain

f:id:Raspberly:20210706004549g:plain

 

 

お得なセール情報

現在アセットストアでは、サマーセールが開催中!
7週間にわたってテーマ別にセール対象アセットが変わります!

 

今週のテーマは2Dゲーム・モバイルゲーム開発向けアセットです。
詳しくは↓のバナーからどうぞ!

f:id:Raspberly:20210706011403j:plain

今回紹介する「2DxFX: 2D Sprite FX」もセール対象です!

 

セールのスケジュール

  • 1週目:低ポリゲーム-2021年6月22日-6月28日
  • 2週目:2Dゲーム-2021年6月29日-7月5日
  • 3週目:3Dゲーム-2021年7月6日-7月12日
  • 4週目:ファンタジーゲーム-2021年7月13日-7月19日
  • 5週目:SFゲーム-2021年7月20日-7月26日
  • 6週目:ドリームプロジェクト-2021年7月27日-8月9日

2週目の終了時間は日本時間で7月6日15:59までです。

blog.unity.com

 

 

 

どんなアセット?

SpriteRendererやImageにエフェクトを追加するアセットです。 
ディゾルブしたり、ブレンドしたり、色味を変えたり、レトロ調にしたり、歪ませたり、
ホログラム風にしたり、ブラーをかけたりとさまざまなエフェクトが用意されています
それぞれパラメータが用意されているのでカスタマイズも容易です。

 

f:id:Raspberly:20210706004735g:plain

f:id:Raspberly:20210706004726g:plain

個人的にフェード用パラメータがデフォルトで用意されているのがうれしい。

特徴:

  • 65以上の高度なスプライト効果。
  • 高度な稲妻と影のサポート。
  • コードは必要ありません。
  • エディターで直接結果を表示します。
  • 通話の最適化を描画します。
  • すべてのエフェクトにはフェードオプションがあります。
  • アニメーション/アニメーターを操作します。
  • デフォルトのスプライトカラーレンダラーと組み合わせます。
  • 2DxFXは、モバイルデバイス用にも設計されています。
  • 一部のエフェクトはスプライトシートをサポートしています(互換性リストについては、「アトラスの互換性」を参照してください)
  • Unity5.x以降と互換性があります。

2DxFXにはUnity5.0以降(パーソナルまたはプロ)が必要です

公式オンラインドキュメントはこちら

www.vetasoft.store

 

 

 

開発環境

Unity2020.3.12f1

2DxFX: 2D Sprite FX ver3.1.0

 

アップデートごとにエフェクトが増えるのがうれしい

 

 

 

デモシーンの確認

アセットインポート完了時はこんな感じです。

f:id:Raspberly:20210706011837p:plain

2DxFX/Examples/Scenesにデモシーンがあります

f:id:Raspberly:20210706012301g:plain

ここで全エフェクトの確認が行えます。

 

 

使い方

使い方は簡単!

付属のMaterial(または付属のShaderを設定したMaterial)をImageやSpriteRendererに紐づけるだけ!
コードを書く必要もありません。

f:id:Raspberly:20210706002553p:plain

f:id:Raspberly:20210706002530p:plain



ちなみに104種類用意されています。

 

 

実際に試してみる

ユニティちゃんピクセルアートパック*1を使ってエフェクトを付けていきます。

f:id:Raspberly:20210706004443g:plain

数が多いのでサクサクっと

 


Additive
AlphaIntensity
AnimatedBurn
AnimatedMovement
AnimatedOffset
AnimatedPingPong
AnimatedPingPongRotation
AnimatedTwist

f:id:Raspberly:20210706004456g:plain



 

AnimatedZoom
Automatic2Lerp
Blur
BlurHQ
BlurHQPlus
BreakingGlass
BreakingGlassFull
BreakingMirror

f:id:Raspberly:20210706004514g:plain



 

 


Burn
BurnPixel
CircleFade
CircleHole
ColorBrightness
ColorDarkness
ColorGrayscale
ColorHDRCreation

f:id:Raspberly:20210706004536g:plain

 

 

 


ColorHSV
ColorNegative
ColorOnly
ColorRGB
ColorTint
CompressionTintAdditive
DesintegrationPixel
DisolveHDR

f:id:Raspberly:20210706004549g:plain

 

 


DisolvePixel
Distortion
DoodleDraw
Emboss
EmbossFull
Explode
FishEye
Fluo

f:id:Raspberly:20210706004602g:plain

 

 


Fusion2Sprites
Fusion2SpritesAdditive
Fusion3Sprites
GhostClipping
Glitch
HologramParasite
HologramParasiteAdditive
HologramParasiteTint

f:id:Raspberly:20210706004616g:plain

 

 


HologramParasiteTintAdditive
HologramScanLine
HologramScanLineAdditive
Holographic
HolographicTint
HolographicTintAdditive
InfiniteZoom
InnerGlow

f:id:Raspberly:20210706004633g:plain

 

 


InsideDistortion
JpegCompressionStyle
Kaleidoscope
Lerp2sprites
LightGlow
LiquidWave
MotionBlurFast
NightVision

f:id:Raspberly:20210706004652g:plain

 

 


NoiseBlur_Horizontal
NoiseBlur_Vertical
Offset
Outline
OutlineEmpty
Perspective3D
Pinch
PixelExplosion

f:id:Raspberly:20210706004726g:plain

 

 


PixelGravityDie
Pixelisation
PixelisationXY
Plasma
Repeat
RetroC64
RetroCGA
RetroCGA2

f:id:Raspberly:20210706004735g:plain

 

 


RetroEGA
RetroGB
RoarDistortion
Shake
Sharpness
ShinyFX
ShinyPixel
SymbioseDistortion

f:id:Raspberly:20210706004743g:plain

 

 


SymbioseDistortionFix
Threshold
ThresholdSmooth
Tilt_Down
Tilt_Left
Tilt_Right
TurnFire
TurnFirePixel

f:id:Raspberly:20210706004754g:plain

 

 


TurnGold
TurnLiquid
TurnMetal
TurnToInfinite
TurnTransparent
Twist
Vintage
Zoom

f:id:Raspberly:20210706004804g:plain

 

 

 

 

まとめ

・2DxFX: 2D Sprite FXはスプライトやUIにつけるエフェクトアセット
全104種類用意されていてパラメータである程度調整ができる

 

これ1つ持っているだけで表現の幅が大きく広がりますね。
アウトラインやシルエット化などよく使うものが含まれているので、
2Dゲームを作っているorよく作る方にオススメのアセットです。

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

*1:© Unity Technologies Japan/UCL

【アセット紹介】White mage spells でエフェクトを作る【Unity】

今回はアセットの紹介をしていきます。
紹介するのはWhite mage spells
魔法系エフェクトアセットです。

f:id:Raspberly:20210629013211p:plain

f:id:Raspberly:20210629000910p:plain

 

 

お得なセール情報

現在アセットストアでは、サマーセールが開催中!
7週間にわたってテーマ別にセール対象アセットが変わります!

今週のテーマはローポリ&AR/VR/MR向けアセットです。
詳しくは↓のバナーからどうぞ!

f:id:Raspberly:20210628233051j:plain

今回紹介する「White mage spells」もセール対象です!

 

セールのスケジュール

  • 1週目:低ポリゲーム-2021年6月22日-6月28日
  • 2週目:2Dゲーム-2021年6月29日-7月5日
  • 3週目:3Dゲーム-2021年7月6日-7月12日
  • 4週目:ファンタジーゲーム-2021年7月13日-7月19日
  • 5週目:SFゲーム-2021年7月20日-7月26日
  • 6週目:ドリームプロジェクト-2021年7月27日-8月9日

1周目の終了時間は日本時間で6月29日15:59までです。

blog.unity.com

 

 

どんなアセット?

Particle Systemを使った魔法系のエフェクトアセットです。
White mageの名の通り、白魔法にちなんだバフ系や光魔法系エフェクトが収録されています。

f:id:Raspberly:20210629005222g:plain

資産が含まれています:
- 26の驚くべき効果プレハブ
-特別にこの資産のために作成された10個のユニークなアイコン
- 15高品質のSFX
HQ PBRファンタジースタッフの追加などの資産を。

 

ちなみに、無料のサポートパッケージアセットを導入するとURP/HDRPに対応させることができます。

 

WebGLですぐに動作確認ができるデモが用意されています!(音がでます)

https://simmer.io/@ErbGameArt/white-mage-spells

 

 

また、別売りの杖のアセットがおまけで含まれています

 

 

実は過去にHumble Bundleのバンドルに含まれていたことがあるので、購入済みの方もいるかも!

www.asset-sale.net

 

 

開発環境

Unity 2020.3.12f1

 

 

 

デモシーンの確認

アセットインポート完了時はこんな感じです。

f:id:Raspberly:20210628230958p:plain

 

PBR Fantasy staff

PBR Fantasy staffに杖の3Dモデルが含まれています。
豪華7種類!

PBR Fantasy staff/Demo scene/Demo PBR  Fantasy staffシーンで確認できます。

f:id:Raspberly:20210628231100p:plain

 

 

White mage spells

こちらが本体。

White mage spells/Demo scene/white mage spells demoシーンで全部のエフェクトを確認できます。
(モバイル用の軽量版もあります)

f:id:Raspberly:20210629005258g:plain

f:id:Raspberly:20210629005317g:plain

f:id:Raspberly:20210629005345g:plain

エフェクトは全部で10種類です。

 

 

 

使用例

付属のMaterialを使って独自のエフェクトを作ってみました。

f:id:Raspberly:20210629014904g:plain

光の十字架と衝撃波に使用しています。

 

衝撃波

衝撃波についてはこちらのMaterialが最適です。

f:id:Raspberly:20210629015022p:plain

Rendere ModeをMeshにし、MeshはQuadにします。
あとは、Color over LifetimeとSize over Lifetimeで透明度と大きさが変化するようにしたら完成です。

f:id:Raspberly:20210629015308p:plain


十字架

光の十字架はこちらのMaterialを使いました。

f:id:Raspberly:20210629015545p:plain

Render ModeはStreched Billboardにし、Length Scaleを調整して細長くしています。

f:id:Raspberly:20210629103337p:plain

具体的な設定はこちらを参考にしました。

www.youtube.com

 

 

 


粒子エフェクトについてはこちら

raspberly.hateblo.jp

 

 

 

URPに対応してみる

専用のサポートパッケージアセットを導入することでURP/HDRPに対応できます。

 

必要なパッケージのインポート

インポート時、Unityのバージョンによって必要なパッケージが異なります。
今回はUnity2020を使用しているので、「Unity 2020+ URP and HDRP .unitypackage」を選択。

f:id:Raspberly:20210629010813p:plain

 

 メニューバーからTools/RP changer for Hovl Studio assetsを選択

f:id:Raspberly:20210629011325p:plain

変換用のウインドウが表示されるので、Universal RPボタンを押します。

f:id:Raspberly:20210629011447p:plain

これで完了です。URPでも表示されました。

f:id:Raspberly:20210629020711p:plain



 

 

 

まとめ

・White mage spellsは白魔法系エフェクトアセット
・エフェクト、アイコン、杖の3つが含まれている
・サポートパッケージアセットを用いるとURP/HDRPに対応できる

 

 

以上です。

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【Unityネタ】爆発でオブジェクトを吹き飛ばす【AddExplosionForce】

今回はUnityネタをやっていきます。
Particle Systemで作ったエフェクトに合わせて回りのオブジェクトを吹き飛ばしてみます。
キーワードはRigidbody.AddExplosionForceです。

f:id:Raspberly:20210625011740g:plain

 

f:id:Raspberly:20210625030724p:plain

 

 

開発環境

Unity 2020.3.12f1

 

 

 

Rigidbody.AddExplosionForceとは

爆発をシミュレートする力をRigidbodyに与えるメソッドです。

docs.unity3d.com

public void AddExplosionForce(float explosionForceVector3 explosionPosition, float explosionRadius, float upwardsModifier = 0.0f, ForceMode mode = ForceMode.Force));

パラメータ

explosionForce

爆発力、大きければ大きいほど吹き飛ばす力が大きくなります。
距離によって減衰します。

explosionPosition

力を発生させる原点です。

explosionRadius

力が影響を与える範囲です。半径で表します。

upwardsModifier

爆発時、上方向に加える力です。
デフォルト値は0ですが、値を大きくすると上方向に追加で力を加えることができます。
舞い上がらせたい時に使うとよさそう。

f:id:Raspberly:20210625020215g:plain

mode

力の加え方です。
いくつか種類がありますが、一瞬だけ大きな力を加える場合はImpulseが良いです。
詳しくはこちら

ekulabo.com

 

 

 

実際に試してみる

周辺にCubeを置く

適当にCubeを配置します。

f:id:Raspberly:20210625003413p:plain
CubeにはBox ColliderとRigidbodyをアタッチしておきます。

f:id:Raspberly:20210625003445p:plain

ちなみにRigidbodyのMassの値で吹き飛ばされやすさを調整できます。

 

爆発用Particle Systemを置く

視覚的にわかりやすいよう爆発エフェクトを置いておきます。
これはなんでもいいです。

f:id:Raspberly:20210625004509g:plain

 

 

ExplosionSample1コンポーネントをアタッチ

空のGameObjectを作成し、以下のExplosionSample1をアタッチする。

using UnityEngine;

public class ExplosionSample1 : MonoBehaviour
{
    [SerializeField] ParticleSystem m_particle;
    [SerializeField] float m_force = 20;
    [SerializeField] float m_radius = 5;
    [SerializeField] float m_upwards = 0;
    Vector3 m_position;

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Return))
        {
            Explosion();
        }
    }

    public void Explosion ()
    {
        m_particle.Play();
        m_position = m_particle.transform.position;

        // 範囲内のRigidbodyにAddExplosionForce
        Collider[] hitColliders = Physics.OverlapSphere(m_position, m_radius);
        for(int i = 0; i < hitColliders.Length; i++)
        {
            var rb = hitColliders[i].GetComponent<Rigidbody>();
            if(rb)
            {
                rb.AddExplosionForce(m_force, m_position, m_radius, m_upwards, ForceMode.Impulse);
            }
        }
    }
}

Particleに先ほど配置した爆発エフェクトを紐づける

f:id:Raspberly:20210625013306p:plain

 

 

完成

これで完成です。
キーボードのエンターキーを押すとParticle Systemが再生され、爆心地から半径5mのCubeを吹き飛ばします。

f:id:Raspberly:20210625011740g:plain



 

 

間に遮蔽物があったら吹き飛ばないようにする

応用編。
このままでは間に壁があっても貫通して吹き飛ばされてしまいます。

f:id:Raspberly:20210625013213g:plain

これを解決します。

 

遮蔽物を作成

Cubeの作成

遮蔽物となる壁を作成します。Cubeを変形させて作りました。

f:id:Raspberly:20210625013825p:plain

Layerの設定

遮蔽物かどうかを判定するため専用のLayerを用意します。
(LayerではなくTagや判定用のScriptでやってもいい)

 

今回はLayer18にWallを設定します。

f:id:Raspberly:20210625014159p:plain


Inspectorの設定

LayerをWallにし、RigidbodyのisKinematicを有効にします。
これが有効だと物理演算の影響を受けなくなります。

f:id:Raspberly:20210625014642p:plain

 

ExplosionSample2コンポーネントをアタッチ

空のGameObjectを作成し、以下のExplosionSample2をアタッチする。

using UnityEngine;

public class ExplosionSample2 : MonoBehaviour
{
    [SerializeField] ParticleSystem m_particle;
    [SerializeField] float m_force = 20;
    [SerializeField] float m_radius = 5;
    [SerializeField] float m_upwards = 0;
    [SerializeField] int m_wallLayer = 0;
    Vector3 m_position;

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Return))
        {
            Explosion();
        }
    }

    public void Explosion ()
    {
        m_particle.Play();
        m_position = m_particle.transform.position;

        Collider[] hitColliders = Physics.OverlapSphere(m_position, m_radius);
        for(int i = 0; i < hitColliders.Length; i++)
        {
            var rb = hitColliders[i].GetComponent<Rigidbody>();
            if(rb)
            {
                // Rayを飛ばして壁を挟んでいたら無視する
                var hits = Physics.RaycastAll(m_position, hitColliders[i].transform.position - m_position, m_radius);
                bool block = false;
                foreach(var o in hits)
                {
                    if(o.collider.gameObject.layer == m_wallLayer)
                    {
                        block = true;
                        break;
                    }
                }
                if(!block)
                {
                    rb.AddExplosionForce(m_force, m_position, m_radius, m_upwards, ForceMode.Impulse);
                }
            }
        }
    }
}

AddExplosionForceする前にRayを飛ばして遮蔽物があるかどうか判定する処理を入れています。

 

Inspectorの設定はこんな感じ、
Wall Layerには、先ほど作成したWallのレイヤー番号を入力します。

f:id:Raspberly:20210625015636p:plain

 

 

 

完成

これで完成です。
間に遮蔽物があると爆発の影響を受けなくなりました。

f:id:Raspberly:20210625015549g:plain

 

 

 

まとめ

Rigidbody.AddExplosionForceを使えば、爆発をシミュレートしオブジェクトを吹き飛ばすことができる

・Rayを飛ばして遮蔽物があるかどうか判定することで、吹き飛ばないようにできる

 

 

以上です。

 

 

 

参考資料

docs.unity3d.com

 

docs.unity3d.com

sleepygamersmemo.blogspot.com

 

docs.unity3d.com

docs.unity3d.com

 

unity-shoshinsha.biz

 

nopitech.com

 

 

 

【Unityネタ】 パーティクルをParticle System Force FieldやWind Zoneで吹き飛ばす

今回はUnityネタをやっていきます。
Particle Systemで作ったパーティクルに外から力を加えて吹き飛ばしてみます。
Particle System Force FieldWind Zoneの2つのやり方で紹介します。

f:id:Raspberly:20210616030554g:plain

 

 

開発環境

Unity 2020.3.0f1

 

 

 

Particle System Force Fieldとは

Unity2018.3から追加されたParticle Systemに外から力を加えて動きを変化させるコンポーネントです。

docs.unity3d.com

 

 

実際に試してみる

Particle Systemの用意

適当なパーティクルを用意します。なんでもいいです。
今回はこんな感じの煙がもくもくでるものを用意しました。

f:id:Raspberly:20210616014344g:plain

 

External Forcesモジュールの有効化

Particle SystemコンポーネントのExternal Forcesモジュールを有効にします。
これが有効になっていないとForce Fieldからの影響を受けません

f:id:Raspberly:20210616012030p:plain

Multiplier:Force Fieldから受ける力の乗数。値が大きいほど

 

Particle System Force Fieldの作成

Createか右クリックのEffects/Particle System Force Fieldから作成。

f:id:Raspberly:20210616012443p:plain


影響範囲はColliderのようにギズモで表示されます。

f:id:Raspberly:20210616012704p:plain

パラメータはこちら

f:id:Raspberly:20210616012725p:plain

Shape

形状を調整します。球体、半球、シリンダー、ボックスの4種類があります。
それぞれ始点、終点の位置(シリンダーは長さも)を調整できます。

Direction

各方向へ与える力の大きさです。値が大きいほど力が大きくなります。
Curveの設定ができるので強さを時間経過で変化させられます。

Gravity

焦点への引力を設定します。大きいほど引力が強くなり、マイナスになると斥力(反発力)となります。

f:id:Raspberly:20210616014512g:plain f:id:Raspberly:20210616014600g:plain

Focusは焦点の位置です、0だと中心が焦点になり1だと外縁が焦点になります。

Rotation

回転させる力を設定します。
Speedは回転速度、Attractionはパーティクルへの影響度(0~1)、Randomnessは軸毎のランダム性(0~1)です。

Drag

パーティクルを引っ張る(運動を遅くする)力を設定します。
Multiplyを有効にすると、大きさや速度に応じて引っ張る力が大きくなるよう自動で調整が入ります。

Vector Field

Texture3Dを使って影響範囲を設定します(後述)

 

 

 

Particle System Force Fieldの設定

見た目がわかりやすいようSphereを組み合わせてプロペラみたいなのを作りました。
Particle System Force Fieldの子オブジェクトにしておきます。

f:id:Raspberly:20210616020421p:plain

Particle System Force Fieldのパラメータはこんな感じ、半球でもいいですがシリンダーを選択しました。

f:id:Raspberly:20210616020610p:plain

これをパーティクルに近づけると、無事エフェクトが吹き飛ばされました。

f:id:Raspberly:20210616021635g:plain



 

 

Wind Zoneでパーティクルを吹き飛ばす

Particle System Force FieldだけでなくWind Zoneでも同様のことができます。
木を揺らすのによく使われるコンポーネントですが、External Forcesが設定されたエフェクトにも作用します。

 

Createか右クリックの3D Object/Wind Zoneから作成。

f:id:Raspberly:20210616022900p:plain

 

風を吹かせる方向がギズモで表示されます。わかりやすいですね。

f:id:Raspberly:20210616023850p:plain

 

パラメータはこんな感じ

f:id:Raspberly:20210616023109p:plain

Mode

Wind Zoneの範囲を設定します。
Sphericalは球体の範囲内で、Directionはシーン全体に影響を与えます。

Main

発生させる風の強さを設定します。

Turbulence & Pulse ~

急激に変化する風や時間の経過で変化する度合い・頻度を設定しますが、
パーティクルには影響しないっぽい

 

 

実行すると、Wind Zoneの影響を受けているのがわかります。
TransformのRotationを変化させるだけで方向を制御できるので扱いやすいですね。

f:id:Raspberly:20210616023927g:plain

 

 

シーン全体に作用するため、ステージ全体のエフェクトに影響を与えたい時に便利です。

f:id:Raspberly:20210616024440g:plain

 

 

 

 

まとめ

Particle System Force FieldWind Zoneを使えば、パーティクルに力を加えて吹き飛ばすことができる

・Particle System側はExternal Forcesを有効にするだけ

 

 

以上です。

 

 

 

参考資料

docs.unity3d.com

docs.unity3d.com

www.youtube.com

 

kan-kikuchi.hatenablog.com

 

 

 

Texture 3Dそのものについてはこちら

docs.unity3d.com

www.youtube.com

 

 

 

【アセット紹介】Feel で演出を作る【Unity】

今回はアセットの紹介をしていきます。
紹介するのはFeel
ゲームにおける演出を実装し、よりよいゲーム体験を作り出せるアセットです。

f:id:Raspberly:20210610035853p:plain

f:id:Raspberly:20210610034011p:plain

パブリッシャーはCorgi EngineTopDown EngineでおなじみのMore Mountainsさんです。

 

 

お得なセール情報

現在アセットストアでは、2021年上半期にリリースされた新作アセットのセールが開催中!終了しました

f:id:Raspberly:20210610010428p:plain

今回紹介する「Feel」もセール対象アセットです。
詳しくは上のバナーからどうぞ。

 

※この記事にはgifが多く含まれています

 

 

どんなアセット?

一言でいうと「ゲームの感触を向上させるアセット」です。

f:id:Raspberly:20210610033534g:plain

プレイヤーのアクションに合わせて、エフェクトや音が出たり画面が揺れたりオブジェクトが動いたり、
演出が発生するだけでゲームの見栄えや体験の質が大きく向上しますよね。
Feelを使うとそれらの演出が簡単に実装できます

Feelは、オンデマンドのゲーム感覚を Unity ゲームに提供するための、すぐに使用できるソリューションであり、できるだけ摩擦やセットアップを最小限に抑えます。これはモジュール式でユーザー フレンドリーで、非常に簡単に拡張できるシステムです。

演出のことをFeelではフィードバックと表現しています。

 

 

 公式Webサイトはこちら

feel.moremountains.com

 

 

 

開発環境

・Unity 2020.3.0f1

・Feel Ver2.2

 

以下のパッケージは必須ではないがFeelを最大限発揮するために必要なものです

・2D Animation ver3.2.9

・Cinemachine ver2.6.5

・PostProcessing ver3.0.3

・TextMeshPro ver2.1.6

 

 

 

 

インポートの確認

インポート

Feelは、Animation 2DCinemachinePostProcessingTextMesh Proがあると最大限の力を発揮します。
UPMからインストールしておきましょう。(Animation 2Dは一部デモでのみ使われる)

 

 

アセットインポート完了時はこんな感じです。

f:id:Raspberly:20210610013433p:plain

  • FeelDemosは、多くのデモを含むフォルダーであり、それぞれが独自のフォルダーとサブフォルダーに含まれています。これらのデモでは、Feel のさまざまな機能を紹介しています。詳細については、ドキュメントのデモ セクションをご覧ください。
  • MMFeedbacksは、アセットの主要部分です。これには、MMFeedbacks システム、すべてのフィードバック、およびデモ シーンが含まれています。MMFeedbacks を使用する場合に保持する必要がある唯一の必須フォルダーです。その中の Demos フォルダーを安全に削除できます。
  • MMTools : MMTools は、さまざまな便利なツールが詰まった素晴らしいライブラリで、アセットに含めると良いと思いました。驚きが満載です。
  • NiceVibrations : Feel にギフトとして含まれています。Nice Vibrationsは、iOS または Android ゲームに触覚フィードバックを追加するための最良の方法です。専用の Web サイトで詳細を確認できます。

 

デモシーンの確認

デモシーンはAssets/Feel/FeelDemosにあります。
(URPとHDRPでデモを開く場合、一部レンダリングがおかしくなることがあるそうです)

f:id:Raspberly:20210610013457p:plain

様々なゲームを想定したデモシーンが用意されていて、演出の参考になりますね。
フィードバックの具体的な設定方法も参照できます。 

f:id:Raspberly:20210610015839g:plain

f:id:Raspberly:20210610020226g:plain

f:id:Raspberly:20210610020332g:plain

エフェクトなど素材も豊富なのでいろいろ活用できそうです。

 

 

フィードバックの確認

Assets/Feel/MMFeedbacks/Demos/MMFeedbacksDemoにフィードバックの動作確認が行えるシーンがあります。

f:id:Raspberly:20210610015310p:plain



 

 

 

 

実際に試してみる

チュートリアルに従ってこの「Cubeがぴょんぴょんジャンプするシーン」にFeelで演出をつけていきます。

f:id:Raspberly:20210610023431g:plain

※細かいセッティングは割愛します

ステージとプレイヤーの作成

ステージとしてPlaneを配置します。

f:id:Raspberly:20210610021057p:plain

プレイヤーとしてCubeを配置します。
CubeにはRigidbodyと以下のFeelPlayerコンポーネントをアタッチします。

using UnityEngine;
using MoreMountains.Feedbacks;

public class FeelPlayer : MonoBehaviour
{
    public KeyCode actionKey = KeyCode.Space;
    public float jumpForce = 8f;
    public MMFeedbacks jumpFeedback;
    public MMFeedbacks landingFeedback;

    private Rigidbody rb;
    private bool isJump;

    void Start()
    {
        rb = gameObject.GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKeyDown(actionKey) && !isJump)
        {
            Jump();
        }
    }

    private void Jump()
    {
        rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
        isJump = true;
        jumpFeedback?.PlayFeedbacks();
    }

    private void OnCollisionEnter(Collision collision)
    {
        if (!isJump) return;
        isJump = false;
        landingFeedback?.PlayFeedbacks();
    }
}

フィードバックが設定されている場合PlayFeedbacksで再生します。

 

さらにSkyboxを適用なものに変えておきます。Feel付属のSkyboxがいくつかあるのでオススメです。

ゲームを再生してスペースキーを押すとCubeがぴょんぴょんジャンプします。

f:id:Raspberly:20210610023431g:plain

まだ何もフィードバックがないので演出はありません。

 

 

Cameraの設定

CinemachineとPostProcessingの設定をします。

Cinemachine

Cinemachine/Create Virtual CameraでVirtual Cameraを作成します。

f:id:Raspberly:20210610021621p:plain

PostProcessing

3D Object/Post-process VolumeでPost-process Volumeを作成します。

f:id:Raspberly:20210610021647p:plain


isGlobalにチェックを入れ新しいプロファイルを作成、Vignetteなどいくつかエフェクトを追加します。

f:id:Raspberly:20210610021923p:plain

 

Main CameraオブジェクトにPost-process Layerコンポーネントをアタッチし、
LayerをEverytingにします。

f:id:Raspberly:20210610022102p:plain

 

フィードバックの作成

ここからがメインです。
このCubeにフィードバックを追加し演出をつけていきます。

 

Cubeの子オブジェクトとして空のGameObjectを2つ作成し
名前を「JumpFeedback」と「LandingFeedback」にMMFeedbacksコンポーネントをアタッチします。
それぞれジャンプした時・着地した時に呼ばれるフィードバックです。

f:id:Raspberly:20210610022224p:plain

作成したフィードバックはCubeのFeelPlayerコンポーネントに紐づけます。

f:id:Raspberly:20210610022243p:plain

 

フィードバックの追加

最初はシンプルにジャンプした時Cubeを回転させてみます。
JumpFeedbackオブジェクトのMMFeedbackコンポーネントを編集します。
MMFeedbacksのAdd new feedback...からTransform/Rotationを選択。

f:id:Raspberly:20210610022316p:plain

 

Rotation Targetに親のCubeを指定して、Animate Rotation Durationを1に
AnimateをXだけにしCurveを変更します。

f:id:Raspberly:20210610022701p:plain

 

この状態でゲームを再生しジャンプさせるとクルクル回転します。

f:id:Raspberly:20210610023343g:plain

 

 

フィードバックを追加2

もっと演出を追加してみます
JumdFeedbackに続けてフィードバックを追加します

音を出す

Audio/Soundフィードバックを追加、MethodをChachedにしSfxにオーディオファイルを紐づけます。

f:id:Raspberly:20210610023321p:plain

スローモーションにする

Time/Timescale Modifierフィードバックを追加。
Initial Delayを0.5にし少し遅れてスローモーションに入るようにします。
Time Scaleを0.1、Time Scale Durationを1.2にします。

f:id:Raspberly:20210610023645p:plain

最後にJumpFeedbackオブジェクトにMMTimeManagerをアタッチして完成です。
(Timeに関するフェードバックを使うときに必須のコンポーネントです)

f:id:Raspberly:20210610023747p:plain

これでジャンプして0.5秒後に1.2秒間Timescaleが0.1になります。

f:id:Raspberly:20210610024117g:plain

 

 

 

フィードバックを追加(着地時)

次は着地時の演出を追加します
LandingFeedbackオブジェクトのMMFeedbackコンポーネントを編集します

画面をゆらす

Camera/Cinemachine Impulseフィードバックを追加。
Raw Signalの右側にある歯車ボタンからPresets/6D Shakeを選択。

f:id:Raspberly:20210610024224p:plain

一番下のVelocityを2に。

f:id:Raspberly:20210610024439p:plain

 

 

最後にCinemachineの設定を変えます。
Virtual CameraのCinemachineVirtualCameraコンポーネントのExtensionsに
Cinemachine Impulse LintenerをAddします。

f:id:Raspberly:20210610024302p:plain

 

これで画面がゆれる演出ができました

f:id:Raspberly:20210610025152g:plain

 

 

Lens Distortionをつける

PostProcess/Lens Distortionフィードバックを追加
Remap Intensity Oneを50にします

f:id:Raspberly:20210610024800p:plain


Post-process VolumeのあるオブジェクトにMMLensDistortionShakerコンポーネントをアタッチ
(Lens Distortionを使うときに必須のコンポーネントです)

f:id:Raspberly:20210610024922p:plain

 

これでカメラが歪む演出ができました

f:id:Raspberly:20210610025247g:plain

 

 

Color Gradingをつける

PostProcess/Color Gradingフィードバックを追加
Shake Durationを0.3にします

f:id:Raspberly:20210610030805p:plain


Post-process VolumeのあるオブジェクトにMMColorGradingShakerコンポーネントをアタッチ
(Color Gradingを使うときに必須のコンポーネントです)

f:id:Raspberly:20210610025454p:plain

 

これでカメラの色彩を一瞬だけ変更する演出ができました(画面の点滅に注意)

f:id:Raspberly:20210610031424g:plain

 

 

 

パーティクルを出す

Particles/Particles Playフィードバックを追加。
Bound Particle Systemに再生したいParticle Systemを紐づけます。
(パーティクルは適当に、いいのがなければFeelに付属しているやつで代用)

f:id:Raspberly:20210610030242p:plain

 

これでパーティクルが再生されます

f:id:Raspberly:20210610030849g:plain

 

 

ライトを出す

Lightフィードバックを追加。
Cubeの接地あたりにPoint Lightを作成し、Bound Lightに紐づけます。

f:id:Raspberly:20210610031206p:plain

PointLightの色を上書きされたくない場合はModify Colorのチェックを外します。

 

これでライトを一瞬灯す演出ができました

f:id:Raspberly:20210610031639g:plain

 

 

 

完成

ここまで追加したフィードバックを全て使うとこうなります。
かなり見栄えがよくなりましたね。

f:id:Raspberly:20210610032245g:plain

 

 

 

 

デバッグ方法

このアセットの便利な機能にデバッグ機能があります。
これはInspectorのMMFeedbackからPlayボタンを押すことでそのフィードバックを即座に確認できる機能です。

f:id:Raspberly:20210610032752p:plain

ジャンプする時の演出を確認したい時に毎回ジャンプする必要はないわけです。
フィードバック個別に再生もできます。

 

 

 

 

 

まとめ

今回Cubeに演出をつけてみましたが、これらの演出はFeelでなくても実装はできます。
音を鳴らすならAudioSource.PlayOneShotを、エフェクトを再生したいならParticleSystem.Playを、
何か動かしたいならTween系ライブラリをインポートしScriptに記述すればいいわけです。


Feelの利点はこれらの演出を簡単に実装でき、Scriptを変えることなくパラメータの修正ができることです
デバッグ機能やドキュメントも充実しているためオススメのアセットです。

 

現在アセットストアの人気ランキング第1位!
その汎用性の高さからめちゃくちゃ流行りそうな予感がします!

 

ちょっとの時間でこんなきれいな演出が作れちゃうのはとっても便利!

f:id:Raspberly:20210610033534g:plain

 

 

 

 

余談

通常価格44ドル、セール価格で22ドルのアセットですが、
私の場合63%OFFの16.50ドルで購入できました。

f:id:Raspberly:20210610015459p:plain

理由は不明ですがTopdown Engineを購入済みのためパブリッシャーのおまけでさらに安くなったのかも。
Corgi EngineやTopdown Engineを購入済みの方はストアページを確認してみてね!

 

 

 

追記 CorgiEngineやTopDownEngineを購入済みの方


今回紹介したFeel(厳密にはMMFeedbacksなど)ですが、
CorgiEngineやTopDownEngineに最初から含まれているアセットです。
これらのアセットを購入済みの方は、別途Feelを購入する必要はありません

 

Feelに含まれているMMFeedbacksを使ったサンプルや素材が、欲しい方は購入してもいいかもしれません。

 

詳しくはこちらの記事をご覧ください!

tat1kun.hatenablog.com

 

 

他の方の紹介記事

qiita.com

xrdnk.hateblo.jp

www.karvan1230.com

temoshiblog.com

 

 

 

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。