Raspberlyのブログ

Raspberlyのブログ

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

【勉強会レポ】: Gotanda.unity #19

勉強会のレポート(メモ)です。
参加したのはこちら「Gotanda.unity #19」

meetup.unity3d.jp

ハッシュタグ : #gotandaunity

 

 

アーカイブはこちら

www.youtube.com

この記事は私の主観でのまとめです。
重要な情報を削っていたり、解釈違いの場合があるのでアーカイブの動画と合わせてどうぞ。

 

Gotanda.unityとは

都内近郊を中心に活動を行うUnityユーザのコミュニティです
Unityに興味がある人であれば、どなたでも気軽にご参加いただけます!
(五反田発の勉強会であることから「Gotanda.unity」というネーミングになっております)

 

 

 

LT#1 (スポンサー枠) tetsu: MirrativでのUnity as a Library活用事例

MirrativでのUnity as a Library活用事例についてお話します

Unity as a Library(UaaL)とは

Unityをネイティブアプリのライブラリとして利用する技術です。
Mirrativのエモモ(3Dアバター)で使用しています。
・ギフト(アイテムやスタンプ)機能の処理はアプリ側で、演出をUnityで行っています。

メリット

・Unityの3D機能が使える
・デザイナーがそのまま作れる
・Unityだけで完結し、確認する時アプリビルドの必要がない

演出の難しさ

・Unityの初期化中やロード中にもアプリ側の処理が行われる→キャンセル処理を適切にいれる必要がある
・演出のタイミングや順番を制御する仕組みが必要
・演出の豪華さと負荷のバランスが大事(許容判断と負荷の改善が必要)

UaaLは×演出はこんな人におすすめ

・Unity+ネイティブ両方の機能を使ってみたい人
・新しい演出で驚きを提供したい人
・新しい技術の先端を追いかけたい人

 

 

 

LT#2 (初登壇枠) Denik: 新MLAPI(v0.1.0)でマルチゲームを作ってみた

MLAPI Quick Start

MirrorのQuick Startを新MLAPIに対応したサンプルを作りました。

xrdnk.hateblo.jp

MLAPIとは

Unityが買収したGameObject向けマルチプレイヤーソリューションです。
TISの「XR Campus ツアーサービス トライアル版」で採用中です。

www.tis.jp

新旧の違い

詳しくはこちら

xrdnk.hateblo.jp

機能紹介

・NetworkObject、NetworkTransformなど同期コンポーネントが用意されています
・1シーンに一つ必要な管理クラスNetworkManagerがあります
・同期させるScriptはNetworkBehaviourを継承する必要があります
・変数の同期を行いたい場合はNetworkVariable型を使用します
・RPCも使用できます

CunstomMessagingManager

NetworkObjectやRPCは、NetworkObjectがアタッチされていてNetworkBehaviourを継承したクラスでないと利用できない。
それらがなくても同期処理を行いたい場合はCustomMessagingManagerを利用する

詳しくはスライドをどうぞ

 

 

 

LT#3 むろほし: Unity 2021.1でのUnityパッケージの名称変更について

Unityのパッケージの名称、区分の変更についてお話します

2020.3以前のパッケージ区分

検証済み(Verified):実際のプロジェクトに導入できるもの

プレビュー(Preview):検証中のもの、仕様変更やサポートが終わる可能性があるなど実験的なものも含める

2021.1以降のパッケージ区分

リリース済み(Released):検証済みに相当。PackageManagerから導入できる

プレリリース(Pre-release):その年のLTSリリースまでにReleasedになることが期待されるパッケージ
ProjectSettingから設定しないとPackageManagerに表示されない

実験的(Experimental):実験的、手探り状態のパッケージ。リリースされないかもしれないパッケージ。
PackageManagerには表示されない。2020.3LTSの時点でPreviewだったパッケージは原則Experimental。
そのうちのいくつかは公式ドキュメントの方法で導入できる

リリース候補(Release Candiate)

公式リリースの有力な候補であるパッケージ

Unity - Manual: Release Candidates

非推奨(Deprecated):サポートしていないパッケージ

 

詳しくはこちら

blog.unity.com

まとめ

・パッケージの名称が変わりました
・プレビューはプレリリースとエクスペリメンタルに分かれてわかりやすくなりました

 

 

 

LT#4 こりん: UnityのVR開発環境の現状整理

UnityのVR開発環境の状況が込み入っているので整理して、今どうすればいいのか答えを出しておきます

先に結論

UnityのXR Interaction Toolkit + OpenVR PluginマルチプラットフォームVR開発の未来です

しかし、Oculus IntegrationやSteamVR Pluginを使わなければならないケースがまだある

全体的な動向

UnityはXR Plugin Managementによるプラグイン方式に変更されたが、
実際には特定のSDKプラグインを組み合わせないといけないものが多い

・Oculus Integration + Oculus XR Plugin
・SteamVR Plugin + OpenVR Plugin
・MRTK + OpenXR Plugin + Miced Reality OpenXR Plugin
・XR Interactiobn Toolkit + Oculus Plugin、OpenXR Plugin等
・WebXR Export + プラグインはまだなし

プラグインにはヘッドセットごとの低レイヤーAPIやサポートAPIが入っています。
ヘッドセットごとにバラバラだと大変なので標準化したOpenXR規格が誕生しました。


その後、UnityのXR Plugin ManagementではOpenXRに対応したOpenXR Plugin
Unity純正XRツールキットXR Interaction Toolkitが生まれました。

この二つはUnityの新しい入力システムInput Systemに移行しています。

forpro.unity3d.jp

 

XR Plugin Management、OpenXR Plugin、XR Interaction Toolkit、Input SystemがUnityの標準VR方式になる見込みです

制限と課題

・Oculus Questのハンドトラッキングには未対応
・SteamVRのViveトラッカーをサポートしていない
・SteamworkのターゲットSDKにOpenXRがないため審査に通るか不透明
・OpenXRに対応したランタイムが複数あるがどのランタイムで起動されるかわからないし動作が異なる

結論

・まだ移行期
・アプリをリリースしたり、ヘッドセット固有の機能を使いたい場合は各プラットフォームのSDKを使う状況が続きそう
・学習用途であればXR Interaction Toolkit+OpenXR Pluginを使ってもいいのでは

告知

XR Interaction Toolkitのページを作りました

framesynthesis.jp

 

 

 

 

LT#5 もんりぃ先生: GraphView のすゝめ

GraphViewの基本やカスタマイズについてお話します

GraphViewとは

ShaderGraphやVFXGraphなど、ノードベースなヴィジュアルプログラミング環境を作るためのAPI/UIを提供するものです。
コードを書かなくてもプログラミングできるようになるのが特徴です。

GraphViewの構成要素

・GraphView:GraphViewを作るためのもの
・Node:一つ一つのノードを作るための機能
・Port:ノードの入出力先をつかさどるもの
・Edge:ポートとポートをつなぐための線
・ISearchWindowProvider:検索窓を作るための機能

GraphViewのTips

数が多いのでスライドをどうぞ

まとめ

・現状Experimental
・最低限ノードベースなグラフを構築することはできる
・カスタマイズするにはUIElements力が求められる

リンク

light11.hatenadiary.com

www.youtube.com

qiita.com

creator.game.cyberagent.co.jp

https://virtualcast.jp/blog/2020/04/playwithgraphview/

 

 

 

 

 

 

 

 

LT#6 (スポンサー枠) おはぎ: Mirrativ 着せ替えの仕組みを解説

エモモの着せ替えについてお話します

着せ替えの仕組み

共通の素体に対してアイテムを着せ替えています。
着せ替えるアイテムに応じた異なる仕組みで着せ替えを実現しています。

ボーンスケールの変更

・部位ごとにスケールを変更する
・素体一つにパラメータを読み込ませて実現している
・パラメータが極端だと破綻するためレギュレーションを決めている

ブレンドシェイプによる変形

・口や顔、表情など
・プリセットを渡して変形させる

テクスチャの入れ替え

・シェーダにテクスチャを渡す

メッシュとマテリアルの入れ替え

・アイテムごとにメッシュとマテリアルを入れ替える
・髪、目・衣装など必ず身に着けているものに対して入れ替える

プレハブの入れ替え

・プレハブを生成して入れ替える
・アクセサリーや置物に対して行う

エモモのクオリティアップ

・揺れ物はボーンを設定、DynamicBoneを使用
・アイテムの自由度を下げないようにお互い干渉しないようにしている

 

 

 

 

LT#7 (初登壇枠) 佐藤 英一: 執筆者になろう! & ちょっとだけUnityバイブル2の裏話

出版社から書籍を出すと何が違うのか

SNSやブログでの情報発信、同人誌の作成や勉強会での登壇と何が違うのか

・著者として名前が刻まれる→末代まで残る

・印税が入ります。電子書籍でも当然入ります。ただしあまり金額にこだわるとお願いしにくい

・(重要)開発者の輪が広がる。いろいろな方から声がかかりつながりができる

残念なお知らせ

・Unityバイブルのような多人数の書籍はほとんどない。バイブルはまたやるがしばらく先になる

・普通の場合は一人で書くか4~5名

・執筆期間は決まっているので負荷は高い

負担は大きいが達成感も大きい

バイブルのよくある質問

・著者は勉強会に登壇した方に声をかけることが多い

・執筆期間は3か月でお願いしているが場合によっては1年になることも

・Unity以外のテーマは能力不足でできません

最後に

・執筆に関心がある!

・自分は無理だけど興味がありそうな人を知っている

・このSNSをやっている人に書いてもらってほしい

などなどある方はぜひご気軽にご連絡ください

宣伝

 

 

LT#8 ナナキ: Timelineを使ってターン制RPGの戦闘を演出する

Timelineの利点

・演出を倍速にできる
・エンジニア以外の人に演出を組んでもらえる
・演出が再利用できる(攻撃する演出など)
・人型のキャラクターだとモーションも再利用できる
・テスト用シーンで演出が組める

モーションを作るのが大変な場合

Mixamoで探す
MocapForAllを使う
・アセットストアで購入する
モーションキャプチャーで作る

・人以外の場合は手付けで頑張るしかない

注意点

・キャラクターの位置、回転は親オブジェクトにやらせる
コンポーネントも親オブジェクトにつける
・エフェクトは対象のルートに持たせて、そこからローカル座標や回転を調整
・キャラの大きさによってモーションの調整が必要

PlayableDerector

Timelineの再生、行動側・行動される側を動かしたり、エフェクトを再生させる

・行動者がTimelineの再生
・Signalが対象者に演出を通知
・対象者は受け取って演出を行う
・PlayableAssetがエフェクト再生(Prefabの設定やInspectorの設定を保持できる利点がある)

 

 

 

 

LT#9 (初登壇枠) イワケン: XR時代のプレゼンテーションをUnityで構築したい

XRプレゼンの技術をお話します(内容的にはUnityとUnrealの座標変換の話)

XRプレゼンとは

XR技術を用いた表現でユーザー行動を促す技術(イワケンが定義した言葉)

UnityからUnrealへの座標変換

HoloLensアプリはUnityで、CG空間はUnrealで作る必要があるので連動させないといけない。
変換としては、反転させたり軸を入れ替えるだけ。
XRプレゼンを用いて直感的に座標変換を伝えます。

 

ここでデモ 動画をご覧ください

 

重要なこと

XRデバイスを被らせるよりも映像の方が今のユーザーには届く
スライドとシステムは分ける(組み込むと大変)

XRプレゼンの意義

リアルで見れないモノや回転をプレゼンテーションできるのが強み
情報だけでなく体験を伝えやすくなる

 

 

 

 

 

 

スポンサー企業紹介

株式会社ミラティブ

ゲーム配信ができるコミュニケーションサービス「Mirrativ」を作っています。
文化として毎週ユーザーのフィードバックに向き合い、全員で共有する会をやっています。

 

現在Unityエンジニア、IOSエンジニア、Androidエンジニア、サーバーエンジニア、
データサイエンティストを募集しています。

www.mirrativ.co.jp

 

株式会社キッズスター

子供向けのサービスを作っています。
メインのプロダクトとして「ごっこランド」を展開しています。

biz.kidsstar.co.jp

 

エンジニアに限らずさまざまなジョブを募集しています

www.wantedly.com

 

ワンダープラネット株式会社

エンターテインメント事業を生業としています。
プロダクトとしては「ジャンプチ ヒーローズ」や「クラッシュフィーバー」などシンプルだけど奥深いプロダクトの開発・運営を行っています。

 

エンジニア募集中です(クライアントもサーバーも)

www.wantedly.com

 

 

 

 

 

 

以上です。

 

今回もとてもおもしろいLTが聞けました。発表者のみなさまお疲れ様です👏

 

 

他の方の感想ブログとか

xrdnk.hateblo.jp

note.com

 

 

 

 

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。

【アセット紹介】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