のぼるゲーム開発備忘録

ゲーム開発のプログラマーです。ゲーム開発関連、調べた内容をアップしていきます。Unityを使用して個人開発を行っています。

【Unity】【AssetStore】Cartoon Explosion FX Pack アセット紹介

f:id:ikeball:20210314123217p:plain

はじめに

機体が破壊されたときの表示向けのアセットを探していて、こちらのアセットを発見しました。アニメ調の爆発アセットになります。
 ※ここでの紹介内容2021/3/14時点のものになります。

 更新が行われ内容が変更される場合があります。

確認環境

Unity 2019.4.16f1

プレハブ

AerialExplosion

FX_AerialExplosion_AA

f:id:ikeball:20210313161120g:plain

FX_AerialExplosion_AB

f:id:ikeball:20210313161233g:plain

FX_AerialExplosion_AC

f:id:ikeball:20210313161331g:plain

FX_AerialExplosion_BA

f:id:ikeball:20210313161448g:plain

FX_AerialExplosion_BB

f:id:ikeball:20210313161554g:plain

FX_AerialExplosion_BC

f:id:ikeball:20210313161651g:plain

FX_AerialExplosion_CA

f:id:ikeball:20210313161808g:plain

FX_AerialExplosion_CB

f:id:ikeball:20210313161902g:plain

FX_AerialExplosion_CC

f:id:ikeball:20210313161957g:plain

FX_SpecialAerialExplosion_AA

f:id:ikeball:20210313162124g:plain

FX_SpecialAerialExplosion_BA

f:id:ikeball:20210313162238g:plain

FX_SpecialAerialExplosion_CA

f:id:ikeball:20210313162338g:plain

BloodExplosion

FX_BloodExplosion_AA

f:id:ikeball:20210313162518g:plain

FX_BloodExplosion_AB

f:id:ikeball:20210313162622g:plain

FX_BloodExplosion_AC

f:id:ikeball:20210313162829g:plain

FX_SpecialBloodExplosion_AA

f:id:ikeball:20210313162940g:plain

ClusterExplosion

FX_ClusterExplosion_AA

f:id:ikeball:20210313163107g:plain

FX_ClusterExplosion_AB

f:id:ikeball:20210313163319g:plain

FX_ClusterExplosion_AC

f:id:ikeball:20210313163504g:plain

FX_ClusterExplosion_BA

f:id:ikeball:20210313164259g:plain

FX_ClusterExplosion_BB

f:id:ikeball:20210313164422g:plain

FX_ClusterExplosion_BC

f:id:ikeball:20210313164604g:plain

FX_ClusterExplosion_CA

f:id:ikeball:20210313164723g:plain

FX_ClusterExplosion_CB

f:id:ikeball:20210313164854g:plain

FX_ClusterExplosion_CC

f:id:ikeball:20210313165003g:plain

FX_SpecialClusterExplosion_AA

f:id:ikeball:20210313165146g:plain

FX_SpecialClusterExplosion_AB

f:id:ikeball:20210313165316g:plain

FX_SpecialClusterExplosion_CA

f:id:ikeball:20210313165502g:plain

GenericExplosion

FX_GenericExplosion_AA

f:id:ikeball:20210313170109g:plain

FX_GenericExplosion_AB

f:id:ikeball:20210313170511g:plain

FX_GenericExplosion_AC

f:id:ikeball:20210314110237g:plain

FX_GenericExplosion_BA

f:id:ikeball:20210314110444g:plain

FX_GenericExplosion_BB

f:id:ikeball:20210314110542g:plain

FX_GenericExplosion_BC

f:id:ikeball:20210314110648g:plain

FX_GenericExplosion_CA

f:id:ikeball:20210314110913g:plain

FX_GenericExplosion_CB

f:id:ikeball:20210314111018g:plain

FX_GenericExplosion_CC

f:id:ikeball:20210314111123g:plain

FX_SpecialGenericExplosion_AA

f:id:ikeball:20210314111317g:plain

FX_SpecialGenericExplosion_BA

f:id:ikeball:20210314111611g:plain

FX_SpecialGenericExplosion_CA

f:id:ikeball:20210314111851g:plain

ToxicExplosion

FX_SpecialToxicExplosion_AA

f:id:ikeball:20210314112046g:plain

FX_ToxicExplosion_AA

f:id:ikeball:20210314112507g:plain

FX_ToxicExplosion_AB

f:id:ikeball:20210314112816g:plain

FX_ToxicExplosion_AC

f:id:ikeball:20210314112952g:plain

Misc

FX_AerialSmokeBlast_AA

f:id:ikeball:20210314113106g:plain

FX_AerialSmokeBlast_AB

f:id:ikeball:20210314113209g:plain

FX_AerialSmokeBlast_BA

f:id:ikeball:20210314113304g:plain

FX_AerialSmokeBlast_BB

f:id:ikeball:20210314113346g:plain

FX_AerialSmokeBlast_CA

f:id:ikeball:20210314113431g:plain

FX_AerialSmokeBlast_CB

f:id:ikeball:20210314113512g:plain

FX_ClusterAerial_AA

f:id:ikeball:20210314113606g:plain

FX_ClusterAerial_AB

f:id:ikeball:20210314113653g:plain

FX_ClusterAerial_AC

f:id:ikeball:20210314113737g:plain

FX_ClusterBlast_AA

f:id:ikeball:20210314114223g:plain

FX_ClusterBlast_AB

f:id:ikeball:20210314114319g:plain

FX_ClusterBlast_AC

f:id:ikeball:20210314114417g:plain

FX_Fire_AA

f:id:ikeball:20210314114502g:plain

FX_Fire_AB

f:id:ikeball:20210314114543g:plain

FX_Fire_AC

f:id:ikeball:20210314114640g:plain

FX_Flame_Trails_AA

f:id:ikeball:20210314114731g:plain

FX_Flame_Trails_AB

f:id:ikeball:20210314114819g:plain

FX_Flame_Trails_AC

f:id:ikeball:20210314114909g:plain

FX_Flame_Trails_BA

f:id:ikeball:20210314115011g:plain

FX_Flame_Trails_BB

f:id:ikeball:20210314115055g:plain

FX_Flame_Trails_BC

f:id:ikeball:20210314115239g:plain

FX_Flare_AA

f:id:ikeball:20210314115334g:plain

FX_Flare_AB

f:id:ikeball:20210314120128g:plain

FX_Flare_AC

f:id:ikeball:20210314120235g:plain

FX_Flares_AA

f:id:ikeball:20210314120025g:plain

FX_Flares_AB

f:id:ikeball:20210314115549g:plain

FX_Flares_AC

f:id:ikeball:20210314115754g:plain

FX_SmokeBlast_AA

f:id:ikeball:20210314120356g:plain

FX_SmokeBlast_AB

f:id:ikeball:20210314120451g:plain

FX_SmokeBlast_AC

f:id:ikeball:20210314120540g:plain

FX_SparkleBlast_AA

f:id:ikeball:20210314120653g:plain

FX_SparkleBlast_AB

f:id:ikeball:20210314120746g:plain

FX_SparkleBlast_AC

f:id:ikeball:20210314120823g:plain

おわりに

さっそく自作ゲームに組み込んで確認してみます。
今後もアセット記事作成していきたいと思います。

関連記事

ikeball.hatenablog.com

【Unity】【AssetStore】Casual SCI-FI GUI Pack-Vertical Mobile アセット紹介

f:id:ikeball:20210221164334p:plain

はじめに

宇宙対戦ものゲーム制作に使えそうなUIを発見しましたのでデモの確認をしました。
カジュアル系のモバイル縦画面向けのUIアセットとなります。

日ごとのリワードや動画再生表示など、カジュアルゲーム向けの表示が多く含まれています。

 ※ここでの紹介内容2021/2/21時点のものになります。

 更新が行われ内容が変更される場合があります。

確認環境

Unity 2019.4.16f1

想定キャンバスサイズ

Unity上の設定は1242 x 2208で行われています。

width : height = 1 : 1.777...

極端に縦に長い端末でない限りそのままのデータで使用できそうです。

f:id:ikeball:20210221164732p:plain

デモシーン

※各シーン共通で15番のデータは無いようです。

DemoScene_Blue

1Loading Canvas

f:id:ikeball:20210221120533g:plain

2Start Canvas

f:id:ikeball:20210221121011g:plain

3MainScene Canvas

f:id:ikeball:20210221121102g:plain

f:id:ikeball:20210221163945g:plain

4DailyRewards Canvas

f:id:ikeball:20210221121200g:plain

5Missions Canvas

f:id:ikeball:20210221121334g:plain

6Pause Canvas

f:id:ikeball:20210221121800g:plain

7GameOver Canvas

f:id:ikeball:20210221122356g:plain

8WatchADS Canvas

f:id:ikeball:20210221122647g:plain

9LevelUp Canvas

f:id:ikeball:20210221150905g:plain

10Shop Canvas

f:id:ikeball:20210221150958g:plain

11Theme Canvas

f:id:ikeball:20210221151054g:plain

12Achievement Canvas

f:id:ikeball:20210221151200g:plain

13Settings Canvas

f:id:ikeball:20210221151255g:plain

14Titles Canvas

f:id:ikeball:20210221151343g:plain

16Components Canvas

f:id:ikeball:20210221151429g:plain

DemoScene_Purple

1Loading Canvas

f:id:ikeball:20210221152017g:plain

2Start Canvas

f:id:ikeball:20210221152121g:plain

3MainScene Canvas

f:id:ikeball:20210221152209g:plain

f:id:ikeball:20210221164124g:plain

4DailyRewards Canvas

f:id:ikeball:20210221152300g:plain

5Missions Canvas

f:id:ikeball:20210221152527g:plain

6Pause Canvas

f:id:ikeball:20210221152627g:plain

7GameOver Canvas

f:id:ikeball:20210221152745g:plain

8WatchADS Canvas

f:id:ikeball:20210221152842g:plain

9LevelUp Canvas

f:id:ikeball:20210221153016g:plain

10Shop Canvas

f:id:ikeball:20210221153122g:plain

11Theme Canvas

f:id:ikeball:20210221153201g:plain

12Achievement Canvas

f:id:ikeball:20210221153254g:plain

13Settings Canvas

f:id:ikeball:20210221153333g:plain

14Titles Canvas

f:id:ikeball:20210221153417g:plain

16Components Canvas

f:id:ikeball:20210221153446g:plain

DemoScene_Turquoise

1Loading Canvas

f:id:ikeball:20210221154415g:plain

2Start Canvas

f:id:ikeball:20210221154333g:plain

3MainScene Canvas

f:id:ikeball:20210221154758g:plain

f:id:ikeball:20210221154548g:plain

4DailyRewards Canvas

f:id:ikeball:20210221154639g:plain

5Missions Canvas

f:id:ikeball:20210221154858g:plain

6Pause Canvas

f:id:ikeball:20210221160616g:plain

7GameOver Canvas

f:id:ikeball:20210221160727g:plain

8WatchADS Canvas

f:id:ikeball:20210221160827g:plain

9LevelUp Canvas

f:id:ikeball:20210221160945g:plain

10Shop Canvas

f:id:ikeball:20210221161137g:plain

11Theme Canvas

f:id:ikeball:20210221161248g:plain

12Achievement Canvas

f:id:ikeball:20210221161428g:plain

13Settings Canvas

f:id:ikeball:20210221161527g:plain

14Titles Canvas

f:id:ikeball:20210221161609g:plain

16Components Canvas

f:id:ikeball:20210221161638g:plain

DemoScene_Yellow

1Loading Canvas

f:id:ikeball:20210221161817g:plain

2Start Canvas

f:id:ikeball:20210221161745g:plain

3MainScene Canvas

f:id:ikeball:20210221162135g:plain

f:id:ikeball:20210221162004g:plain

4DailyRewards Canvas

f:id:ikeball:20210221162251g:plain

5Missions Canvas

f:id:ikeball:20210221162420g:plain

6Pause Canvas

f:id:ikeball:20210221162520g:plain

7GameOver Canvas

f:id:ikeball:20210221162622g:plain

8WatchADS Canvas

f:id:ikeball:20210221162715g:plain

9LevelUp Canvas

f:id:ikeball:20210221162839g:plain

10Shop Canvas

f:id:ikeball:20210221163405g:plain

11Theme Canvas

f:id:ikeball:20210221163451g:plain

12Achievement Canvas

f:id:ikeball:20210221163622g:plain

13Settings Canvas

f:id:ikeball:20210221163700g:plain

14Titles Canvas

f:id:ikeball:20210221163735g:plain

16Components Canvas

f:id:ikeball:20210221163825g:plain

おわりに

モバイル向けのSCIで活躍できそうなアセットでした。

さっそく自作ゲームに組み込みます!

今後もアセット記事作成していきたいと思います。

関連記事

PC向け、スマフォ横画面向けのゲームに使用できそうなSCIのUI記事になります。

ikeball.hatenablog.com

推しアセット

Fantasy Cyberpunk UI Pack

Modern Shooting UI Pack

【Unity】【AssetStore】SCI-FI UI Pack_V1 Pro アセット紹介

f:id:ikeball:20210221043509p:plain

はじめに

宇宙対戦ものゲーム制作に使えそうなUIを発見しましたのでデモの確認をしました。

SCIのオシャレなUIのアセットとなっていました。

 ※ここでの紹介内容2021/2/21時点のものになります。

 更新が行われ内容が変更される場合があります。 

確認環境

Unity 2019.4.16f1

ライセンスについて

f:id:ikeball:20210221045239p:plain

※2021/2/21時点の確認内容

Documentファイルが用意されており、Fontのラインセンス表記の記載がありました。

使用されているフォントを組み込んだゲームを販売することは許可されていました。

Fontをそのまま販売するなど禁止されている事項もありますので、ご自身でご確認の上、ご使用お願いします。

デモシーン

Components V1

Components_V1_LoadingPage

f:id:ikeball:20210221045519p:plain

Components_V1_SignIn

f:id:ikeball:20210221045553p:plain

Components_V1_Buttons

f:id:ikeball:20210221045631p:plain

Components_V1_IconButtons

f:id:ikeball:20210221045659p:plain

Components_V1_ItemButtons

f:id:ikeball:20210221045740p:plain

Components_V1_Part1

f:id:ikeball:20210221051923p:plain

Components_V1_Part2

f:id:ikeball:20210221052010p:plain

Components_V1_Part3

f:id:ikeball:20210221052137p:plain

Components_V1_Part4

f:id:ikeball:20210221052222p:plain

Components_V1_Panels1

f:id:ikeball:20210221052256p:plain

Components_V1_Panels2

f:id:ikeball:20210221052325p:plain

Components_V1_Popups1

f:id:ikeball:20210221052346p:plain

Components_V1_Popups2

f:id:ikeball:20210221052419p:plain

Components_V1_Popups3

f:id:ikeball:20210221052444p:plain

Components_V1_Popups4

f:id:ikeball:20210221052506p:plain

Components_V1_Customizable1

f:id:ikeball:20210221052531p:plain

Components_V1_Customizable2

f:id:ikeball:20210221052606p:plain

Components_V1_Customizable3

f:id:ikeball:20210221052631p:plain

Components_V1_Customizable4

f:id:ikeball:20210221052701p:plain

Demo Scene

1Loadingage_V1

f:id:ikeball:20210221052930g:plain

2MainMenu_V1

f:id:ikeball:20210221053245g:plain

3MapSelect_V1

f:id:ikeball:20210221053448g:plain

4Levels_V1

f:id:ikeball:20210221053708g:plain

5SignIn_V1

f:id:ikeball:20210221053851g:plain

6SignUp_V1

f:id:ikeball:20210221054031g:plain

7Scene1_V1

f:id:ikeball:20210221054143g:plain

8Scene2_V1

f:id:ikeball:20210221054259g:plain

9Store_V1

f:id:ikeball:20210221054423g:plain

10Character_V1

f:id:ikeball:20210221054544g:plain

11NoCoins_V1

f:id:ikeball:20210221054714g:plain

12Recharge_V1

f:id:ikeball:20210221054944g:plain

13Ranking_V1

f:id:ikeball:20210221055107g:plain

14Pause_V1

f:id:ikeball:20210221055235g:plain

15Settings_V1

f:id:ikeball:20210221060543g:plain

16Victory1_V1

f:id:ikeball:20210221055428g:plain

17Victory2_V1

f:id:ikeball:20210221055510g:plain

18Warning_V1

f:id:ikeball:20210221055619g:plain

19Died_V1

f:id:ikeball:20210221055706g:plain

20GameOver_V1

f:id:ikeball:20210221055730g:plain

21CreatingCharacter_V1

f:id:ikeball:20210221060013g:plain

22Quit_V1

f:id:ikeball:20210221060054g:plain

Icons1

f:id:ikeball:20210221060134p:plain

Icons2

f:id:ikeball:20210221060158p:plain

Icons3

f:id:ikeball:20210221060231p:plain

Icons4

f:id:ikeball:20210221060257p:plain

おわりに

アセット系記事見てくれている方がいると聞いて嬉しいです。

記事を書く中で、モバイル向けUIを探している場合Casual SCI-FI GUI Pack-Vertical Mobileも良いと感じました。

今後も記事作成していきたいと思います。

推しアセット

Casual SCI-FI GUI Pack-Vertical Mobile

Fantasy Cyberpunk UI Pack

Modern Shooting UI Pack

【Unity】【Corgi Engine】画面遷移/ステージ選択の確認

f:id:ikeball:20210220091844p:plain

はじめに

今回はCorgi Engineの画面遷移・ステージ選択について確認してみました。

ここが分かればタイトル → マップ選択 → ゲーム画面 → マップ選択 ... と言ったサイクルも作ることができます。

 

CorgiEngineでの遷移で大事なのはLevelSelectorです。

ゴールで遷移先を設定する場合はFinishLevelでした。

スクリプトを扱う場合はLevelManagerが肝になります。

使用アセット

Corgi Engine - 2D + 2.5D Platformer

確認環境

Unity 2019.4.16f1

f:id:ikeball:20210220152057g:plain

ステージ選択

LevelSelectionの確認

LevelSelectionの遷移がどのように行われているか確認しました。

f:id:ikeball:20210220093128g:plain

UICamera/Canvas/Mask/MMCarousel/Content/Retro1/ButtonAlt に付いている

LevelSelector コンポーネントで遷移先を指定しています。

 

LevelName ... 遷移先のシーン名

※遷移先のシーンはBuildSettingsで登録されている必要があります。

シーン登録のやり方に登録方法をまとめています。

f:id:ikeball:20210220102113p:plain

LevelSelector.GoToLevel はボタンの反応に合わせて呼び出されています。

ButtonAlt/Container/Background に付いている MMTouchButton にて設定が行われています。

ButtonPressedFirstTime ... ボタンが押されたときの呼び出し

f:id:ikeball:20210220102010p:plain

自作ボタンでやってみた

Unityのボタンを配置しLevelSelector.GoToLevelを呼び出してみました。

f:id:ikeball:20210220114240g:plain

UICamera/Canvas/ButtonRight/Mask に UI/Button を追加します。

f:id:ikeball:20210220114108p:plain

ボタンの位置・サイズを調整しします。

①Buttonを選択

②OnClickの+を押します

③ButtonAltをドラッグアンドドロップで追加します

④▼からLevelSelector.GoToLevelを選択します

f:id:ikeball:20210220131429p:plain

設定はこれで完了となります。
実行して確認してみてください。

LevelSelectionMap の確認

LevelSelectionMapのシーン選択方法を確認してみました。

ここで主要なスクリプトは3つとなります。

LevelMapCharacter ... 入力を受けてキャラクターの移動、決定の入力受付

LevelMapPathElement ... マップの接続先定義

LevelSelector ... 遷移先のシーン、シーン切り替え

f:id:ikeball:20210220092848g:plain

LevelMapCharacter

f:id:ikeball:20210220132820p:plain

PlayerID ... プレイヤーの操作定義どれを使うか変更する理由はありませんが。

 2プレイヤー同時選択等の場合の2P側はPlayer2となります。

CharacterSpeed ... マップ上でのキャラクター移動スピード

StartPoint ... 開始時の位置

CharacterIsFacingRight ... 初期向きの扱いが右か

f:id:ikeball:20210220133114g:plain

CharacterSpeed = 10 の設定

LevelMapPathElement

マップの各ポイントです。

ポイントは停止ポイント自動移動ポイントの2タイプあります。

AutomaticMovement ... true 自動移動ポイント、 false 停止ポイント

PossibleDirections ... 接続先の場所

停止ポイント

AutomaticMovement が false

f:id:ikeball:20210220133727p:plain

自動移動ポイント

AutomaticMovement が true

f:id:ikeball:20210220134357p:plain

新しい地点を繋げてみた

PE1とPE2を接続してみました。

地点は斜めでも問題なく動くみたいです。

f:id:ikeball:20210220134628g:plain

PE1を選択し、DownへPE21をドラッグアンドドロップで設定

f:id:ikeball:20210220135057p:plain

PE21を選択し、UpへPE1をドラッグアンドドロップで設定

f:id:ikeball:20210220135223p:plain

設定は以上となります。

LevelSelector

f:id:ikeball:20210220135727p:plain

LevelName ... 遷移先のシーン名

※遷移先のシーンはBuildSettingsで登録されている必要があります。

シーン登録のやり方に登録方法をまとめています。

LevelMapPathElement/AutomaticMovementがfalseの地点にLevelSelectorを追加し遷移先のシーン名を記載します。

ステージクリア遷移

Assets/CorgiEngine/Demos/Corgi3D/NewCorgi3D のシーンで確認を行っています。

FinishLevelというスクリプトで遷移が行われていました。

f:id:ikeball:20210220142003g:plain

FinishLevel

f:id:ikeball:20210220142234p:plain

LevelName ... 遷移先のシーン名

※遷移先のシーンはBuildSettingsで登録されている必要があります。

シーン登録のやり方に登録方法をまとめています。

遷移先をLevelSelectionMapに変更してみた

マップ選択画面に戻ることができました。

f:id:ikeball:20210220142802g:plain

FinishLevelのLevelNameをLevelSelectionMapに設定

ゲームオーバー遷移

デモではプレイヤーの体力が0になった場合、リスタートされます。

これをタイトルやロード画面など別のシーンに行いたい場合、どうしたら良いかを確認しました。

f:id:ikeball:20210220093615g:plain

GameManagerにゲームオーバー時に遷移するシーンの設定がありました。

 

f:id:ikeball:20210220150208p:plain

MaximumLives ... 最大残機数。ゲームオーバー遷移を行う場合必ず1以上を設定

CurrentLives ... 現在の残り残機数

GameOverScene ... ゲームーバー時の遷移先シーン名

f:id:ikeball:20210220150030g:plain

 設定を行うと死亡し、残機が無くなると画面遷移します。

体力が0になった瞬間に遷移が走っているのは気になりますね。。。

 

LevelManager

おまけ:スクリプト扱います

Assets/CorgiEngine/Demos/Corgi3D/NewCorgi3D のシーンで確認を行っています。

LevelManagerとは何かですが、これがCorgiEngineでゲームの進行を管理しています。

f:id:ikeball:20210220144012p:plain

LevelManagerのスクリプトにGotoLevelと言うメソッドがあります。

f:id:ikeball:20210220144223p:plain

LevelSelector、CharacterSelector、FinishLevelも全てLevelManagerのGotoLevel()を呼び出しています。

f:id:ikeball:20210220144344p:plain

スクリプトから直接画面遷移を呼び出す場合は、下記を書けば画面が切り替わります。

LevelManager.Instance.GotoLevel( 遷移先のシーン名 );

f:id:ikeball:20210220144559p:plain

※遷移先のシーンはBuildSettingsで登録されている必要があります。

シーン登録のやり方に登録方法をまとめています。

シーン登録のやり方

 登録対象シーンを開いた状態でUnityメニュー → File → Build Settings... を選択します。

f:id:ikeball:20210220104110p:plain

AddOpenScenes を押すと、開いているシーンが登録されます。

CorgiEngineの場合、シーンを名前で指定するため登録順番はあまり関係ありません。

一番上のシーンが起動シーンとなるのでそこだけ要注意です。

f:id:ikeball:20210220103818p:plain

おわりに

CorgiEngineでのシーン切り替えに大事なのはLevelSelectorだと感じました。さっそく自作ゲームに組み込んで各遷移を組み立てたいと思います。

少しでもお役に立つことがあれば幸いです。

ここまで確認頂きありがとう御座いました。

関連記事

ikeball.hatenablog.com

 

ikeball.hatenablog.com

【Unity】【Corgi Engine】CPUの敵AI調査まとめ

f:id:ikeball:20210214233240p:plain

はじめに

今回はCorgi EngineのCPUの敵AIの実装について確認してみました。

AIを設定する上で、用意するマップの形も重要と感じました。

Advancedの方は調査時間がまだ取れておらず、後ほど追加するかもしれません。

 

AIスクリプトの使い方に設定方法を記載しています。

LegacyAIAdvancedAIに各思考のパラメータについてまとめました。

使用アセット

Corgi Engine - 2D + 2.5D Platformer

作業環境

Unity 2019.4.16f1

敵AI設定の場所

Assets/CorgiEngine/Demos/Corgi3D/NewCorgi3Dのシーンで確認しました。

f:id:ikeball:20210124212502p:plain

NewCorgi3D / Level / Enemies / Bear3D に敵がいます。

f:id:ikeball:20210214123414p:plain

Bear3Dのプレハブを開くと、AIWalkというコンポーネントが設定されています。

これがAIの設定となります。

f:id:ikeball:20210214170333p:plain

AIのスクリプト

CorgiEngineで用意されているAIはLegacyフォルダに入っている簡易的な思考と、状態を判断して行動を切り替えるAdvancedフォルダに入っている思考処理があります。

ただ歩いて崖を判定して判定等簡素な設定はLegacyフォルダのScriptを設定することで対応ができます。

f:id:ikeball:20210214172814p:plain

Advancedの方は、設定は複雑になりますがHPが半分以下になったらダッシュを使用するようになる等、条件を見て行動を切り替えることができるようになっています。

f:id:ikeball:20210214173026p:plain

AIスクリプトの使い方

コーギエンジンのAIスクリプトにはLegacy, Advancedの2種類で設定方法があります。

CorgiControllerのついているコンポーネントに思考コンポーネントを追加することで設定できます。

Legacy ... 簡単な思考設定。簡易な動きの場合はこちらが便利です。

AIWalk(歩き), AIFollow(追従), AIShootOnSight(射撃)の三つが用意されいます。思考するコンポーネントを追加すれば機能します。

Advanced ... AIBrainコンポーネントをベースに条件と行動を組み合わせて思考を設定します。詳細な動きが可能な分設定が多くなります。

Legacy AI の設定方法

必要な思考を追加すればOKです。

 

動かないCPUの場合、設定をしないといったことも選択肢となります。

移動を行う場合、AIWalkか、AIFollowを設定し

射撃攻撃が必要な場合は、AIShootOnSightを追加します。

移動が必要なく、射撃を行う場合はAIShootOnSightのみ設定します。

 

各思考の詳細はLegacyAIの項目をご確認ください。

f:id:ikeball:20210216215220p:plain

Advanced AI の設定方法

Advanced AIでは、AIBrainにAIAction(行動)、AIDecision(条件)を設定し思考を行います。

AIAction, AIDecisionの詳細パラメータはAdvancedAIにまとめています。

f:id:ikeball:20210216223006g:plain

ここでは「2秒停止」→ 「2秒歩行」を繰り返す設定にて設定の仕方を紹介します。

f:id:ikeball:20210216224148p:plain

Assets/CorgiEngine/Demos/Corgi3D/Prefabs/AI/Bear3Dにて設定を行います。

f:id:ikeball:20210216224429p:plain

AIWalkのスクリプトを外す

②AIBrainのスクリプトを追加

③AIActionDoNothingを追加 ... 停止の行動

④AIActionPatrolを追加 ... 歩行の歩行

 パラメータ設定を調整し、穴が見つけたら反転するようにしました。

⑤AIDecisionTime in Stateを追加

 2秒で条件を満たすようにしました。

f:id:ikeball:20210216230541p:plain

①AIBrainのStatesの+ボタンを遷移する状態の数である2回押します。

②Actions, Transitionsをそれぞれ1回づつ押します。

 行動や、条件を複数設定する場合はその数に合わせます。

③State Nameの設定を行います。今回はWait(待機)、Walk(歩行)を設定します。

④WaitのActionsにはAIActionDoNothingをドラッグで設定

 WalkのActionsにはAIPatrolをドラッグで設定

 WaitのTransitionsにAIDecisionTime in Stateを設定し、TrueStateに「Walk」を設定

 WalkのTransitionsにAIDecisionTime in Stateを設定し、TrueStateに「Wait」を設定

 

起動時は一番上の状態が実行され、対象の状態のActionsが実行され続けます。

実行中Transitionsの判定が行われ、条件を満たした(/満たしていない場合)に、遷移先の状態があれば、状態の変更が行われます。

 

今回の場合は下記状態が繰り返される形となっています。

①Wait状態で待機を行う

②2秒後の判定が満たされたタイミングでWalkへ

③Walk状態で歩行を行う

④2秒後の判定が満たされたタイミングでWaitへ

 

設定方法は以上となります。

LegacyAI

簡単な設定で思考の設定ができます。

単純な動作に対応しています。

Legacy

AIWalk

f:id:ikeball:20210214191922p:plain

歩く動作の思考

・歩く

・(設定次第)壁にぶつかったら反転する。

・(設定次第)落下を避ける。

・MoveOnSight にてプレイヤーの後ろを歩いてくる仲間の設定も可能

※マップの床の高さに気を付けて設定が必要な場合があります。

 

WalkBehaviour ... 動作の仕方

 Patrol:条件なく歩行

 MoveOnSight:目標を「見ている」場合のみ歩行

Obstacle Detection

壁にぶつかった時にキャラの向きを変えるべきかどうか、穴を避けようとするかどうか設定

ChangeDirectionOnWall ... trueの場合、壁にぶつかったときに方向を反転
AvoidFalling ... trueの場合、落下を避けようとする
HoleDetectionOffset ... 穴の検出を考慮する距離
HoleDetectionRaycastLength ... 穴を検出をするためのキャラの大きさ

Move on Sight

動作がMove On Sightに設定されている場合の設定、「視野」距離の設定

 

ViewDistance ... AIがターゲットを見ることができる最大距離
StopDistance ... 移動を停止する目標からの水平距離。その距離と歩行距離の間で徐々に減速していきます。
MoveOnSightRayOffset ... レイキャストの原点に適用するオフセット(デフォルトはオブジェクトの位置)
MoveOnSightLayer ... ターゲット対象となるレイヤー
MoveOnSightObstaclesLayer ... 視界障害物対象となるレイヤー

f:id:ikeball:20210214215602g:plain

Patrol, AvoidFalling = true の場合

f:id:ikeball:20210214215201g:plain

Patrol, AvoidFalling = false の場合

f:id:ikeball:20210214215929g:plain

Patrol, AvoidFalling = true, HoleDetectionOffset  x = 2の場合

f:id:ikeball:20210214221328g:plain

NG例 Patrol, AvoidFalling = true, HoleDetectionRaycastLength = 1の設定

床があるかどうかの判定で誤った判定をしてしまっている。

f:id:ikeball:20210214221807g:plain

Patrol, AvoidFalling = true, HoleDetectionRaycastLength = 0.3

f:id:ikeball:20210214222544g:plain

MoveOnSight, StopDistance = 1, MoveOnSightLayer = Playerを設定

f:id:ikeball:20210214223011g:plain

MoveOnSight, AvoidFalling = false, StopDistance = 1, MoveOnSightLayer = Playerを設定

AIShootOnSight

f:id:ikeball:20210214193955p:plain

CharacterHandleWeapon とセットで使用する。

プレイヤーが視界にいる間、武器を使用します。←プレイヤーが視界にいない場合、攻撃できません。

条件を見ず攻撃したい場合は、Advancedの設定を行う必要があります。

攻撃動作の思考

・正面にターゲットが入った場合、武器を使用します。

 

ShootDistance ... AIがプレイヤーに向けて撃つことができる最大距離
RaycastOriginOffset ... 視界の判定に使用するオフセット値
TargetLayerMask ... 攻撃対象のレイヤー

敵用の武器の作成

Bear3Dに装備できる武器を用意します。

f:id:ikeball:20210214224857p:plain

Assets/CorgiEngine/Demos/Minimal/Prefabs/Wepons/RegularWepons にある

MinimalShotgun をコピーし MinimalShotgunEnemy としました。

f:id:ikeball:20210214225214p:plain

Bear3D AI 向けに2点変更しています。

①ProjectaileWeapon の Position/WeponAttachmentOffset.y を 0.5

→Bear3Dは背が低いため発射と同時に床に当たってしまうことを防ぎます。

②WeaponAim の AimControlを Script

→キーボードやパットで入力で操作するわけではないため変更しました。

f:id:ikeball:20210214225756p:plain

Bear3D に、AIShootOnSightを追加し、TargetLayerMaskにPlayerを設定

CharacterHandleWeaponのInitialWeaponに用意した、MinimalShotgunEnemyを設定

f:id:ikeball:20210214230130g:plain

f:id:ikeball:20210214230924g:plain

上下の認識検証

AIWalk 無効化, AIShootOnSight のShotDistance = 20

AIFollow

f:id:ikeball:20210214194201p:plain

メインプレイヤーのキャラクターに追従させます。

対象キャラについているコンポーネントで追加動作

CharacterRun ... ターゲットから離れているときに走ろうとします。

CharacterJetpack ... 障害物の上をジェットパックをしようとします。

CharacterJump ... 障害物の上をジャンプしようとします。

Distances

RunDistance ... 走り出す距離。プレイヤーとの水平距離で判定
WalkDistance ... 歩き出す距離。プレイヤーとの水平距離で判定
StopDistance ... 移動を停止する距離。プレイヤーとの水平距離で判定
JetpackDistance ... ターゲットが上上空にある場合にジェットパッカー使用を開始する垂直方向距離

 Bear3D にジャンプ能力付加

f:id:ikeball:20210214233843p:plain

AIWalkを削除、AIFollow, CharacterJump を追加しました。

(パラメータは変更していません)

f:id:ikeball:20210214234210g:plain

AdvancedAI

状態を判断し、行動を設定できるようになっています。

AIBrain に AIAction(行動) / AIDecision(条件)を設定し思考を組み立てます。

Advanced AI一覧

行動 / 条件 動画

AIActionChangeWeapon

武器の切り替え

f:id:ikeball:20210217232130g:plain

AIActionDash

ダッシュ

f:id:ikeball:20210217132203g:plain

AIActionDoNothing

待機

f:id:ikeball:20210217135926g:plain

AIActionFlyPatrol

飛行

f:id:ikeball:20210217234215g:plain

AIActionFlyTowardsTarget

ターゲット方向へ飛行

f:id:ikeball:20210218000051g:plain

AIActionJump

ジャンプ

f:id:ikeball:20210217224954g:plain

AIActionMMFeedbacks

フィードバック実行

 

AIActionMoveAwayFromTarget

ターゲットから離れる

 

AIActionMoveTowardsTarget

追跡

f:id:ikeball:20210218002107g:plain

AIActionPatrol

歩行

f:id:ikeball:20210217104012g:plain

AIActionPatrolWithinBounds

拡張機能付き歩行

f:id:ikeball:20210218001204g:plain

AIActionShoot

射撃

f:id:ikeball:20210217221949g:plain

AIActionSwapBrain

思考切り替え

 

AIActionUnityEvents

スクリプト処理呼び出し

 

AIDecisionDetectTargetLine

直線で視野判定

f:id:ikeball:20210217104809g:plain

AIDecisionDetectTargetRadius

円で視野判定

 

AIDecisionDistanceToTarget

ターゲットとの距離で判定 

 

AIDecisionGrounded

地面に接触しているか判定

 

AIDecisionHealth

体力で判定

 

AIDecisionHit

指定回数で判定

 

AIDecisionLineOfSightToTarget

ターゲットとの間に遮るものがあるか判定

 

f:id:ikeball:20210218003302g:plain

AIDecisionNextFrame

次のフレームtrue

f:id:ikeball:20210218003302g:plain

AIDecisionRandom

乱数で判定

 

AIDecisionTargetFacingAI

ターゲットに見られているか判定

 

AIDecisionTargetIsAlive

 対象が生存しているか判定

 

AIDecisionTargetIsNull

対象がnullか判定

 

AIDecisionTimeInState

状態に入ってからの時間で判定 

f:id:ikeball:20210217102808g:plain

AIDecisionTimeSinceStart

シーンに入ってからの時間で判定 

 

AIAction

AIActionChangeWeapon

f:id:ikeball:20210214194518p:plain

武器を切り替えます。状態に入った際に一度切り替わりが行われます。

HPが少なくなったら攻撃方法が変わるなどに使えそうです。

NewWeapon ... 切り替える武器

f:id:ikeball:20210217232130g:plain

射撃状態に入ってから2秒後に武器を入れ変えるようにしました。

切り替えたタイミングでジャンプを入れています。

f:id:ikeball:20210217232557p:plain

↑の動画で設定している項目になります。設定は多岐に渡るため重要なとこのみ載せています。ご不明な点がありましたらツイッターから問い合わせお願いします。

AIActionDash

f:id:ikeball:20210214194644p:plain

CharacterDash とセットで使用する。

ダッシュ1度行います。

f:id:ikeball:20210217131150g:plain

CharacterDashを付加し、AIActionPatrol 2秒後にダッシュした場合

...勢いよく飛んでいきます。。

f:id:ikeball:20210217132203g:plain

CharacterDashの勢いを抑え、歩きの時間を調整しました。

徐々に位置がずれますね。。高低差が激しいところでのダッシュは調整が大変そうです。平坦なマップや、一発の突撃、ボス部屋での行動などうで使えそうです。

f:id:ikeball:20210217134313p:plain

↑一つ上の動画のために設定したパラメータ、ポイントとして、AIDecsionTime in State を2つ追加し、歩行時は1.5秒、ダッシュ時は0.5秒で状態を切り替わるようにしています。

f:id:ikeball:20210217134718g:plain

ダッシュ状態から切り替えない場合、ずっとダッシュを繰り返します。

動きが止まっているのは思考ではなく、キャラクター動作としての停止となります。

AIActionDoNothing

f:id:ikeball:20210214194714p:plain

何もせず待機です。

プレイヤーが視界に入るまで待機などに使えそうです。

f:id:ikeball:20210217135926g:plain

待機です。

AIActionFlyPatrol

f:id:ikeball:20210214194741p:plain

CharacterFly, MMPath とセットで使用する。

ターゲットの方向に指定された最小距離まで飛行させる。(壁や穴にぶつかるまで飛ぶ)

MMPathによる飛行ルートの指定が必要です。

ChangeDirectionOnObstacle ... trueの場合、障害物に当たった時に向きを反転

f:id:ikeball:20210217234215g:plain

2秒ごとに待機と飛行を繰り返します。MMPathの指定で右上に移動するようにしました。

f:id:ikeball:20210217235218p:plain

↑の動画での設定主要部。

CharacterFlyはAlwaysFlying = trueで常に飛行状態にしています。

飛行状態ではない場合は動けません。

MMPathで飛行ルートの設定を行います。

AIActionFlyTowardsTarget

f:id:ikeball:20210214194847p:plain

CharacterFly とセットで使用する。

ターゲットの設定が必要です。

キャラクターをターゲットの方向に指定された距離まで飛行させる。

MinimumDistance ... ターゲットとの距離

f:id:ikeball:20210218000051g:plain

AIActionFlyTowardsTargetのMinimumDistance = 2の設定

f:id:ikeball:20210218000536g:plain

AIActionFlyTowardsTargetのMinimumDistance = 0の設定

AIActionJump

f:id:ikeball:20210214195054p:plain

CharacterJump とセットで使用する。

設定回数のジャンプを行います。

NumberOfJumps ... ジャンプ回数

f:id:ikeball:20210217224954g:plain

待機、ジャンプを繰り返す設定

f:id:ikeball:20210217225722p:plain

↑の動画で行った設定

AIActionMMFeedbacks

f:id:ikeball:20210214195452p:plain

MMFeedbacksを再生します。

TargetFeedbacks ... 再生するMMFeedbacks

OnlyPlayWhenEnteringState ... falseの場合、フィードバックはPerformActionごとに再生(デフォルトでこの状態の間、毎フレーム再生される)

AIActionMoveAwayFromTarget

f:id:ikeball:20210214195628p:plain

CharacterHorizontalMovementでターゲットから離れるように移動させます。

MinimumDistance ... ターゲットとの距離

AIActionMoveTowardsTarget

f:id:ikeball:20210214195832p:plain

CharacterHorizontalMovementでターゲットの方向に移動させます。

ターゲットの設定が必要です。

MinimumDistance ... ターゲットとの距離

f:id:ikeball:20210218002107g:plain

MinimumDistance = 1にて設定、壁の判定がなくつまっています。

f:id:ikeball:20210218002317p:plain

↑の動画の主要部。ターゲットの設定はAIDecisionDetectTargetRadiusにて行っています。

AIActionPatrol

f:id:ikeball:20210214195951p:plain

壁や穴にぶつかるまで移動します。

Obstacle Detection

ChangeDirectionOnWall ... trueの場合、壁に当たった時、向きを反転
AvoidFalling ... trueの場合、落下を避ける
HoleDetectionOffset ... 穴の検出を考慮する距離
HoleDetectionRaycastLength ... 穴を検出をするためのキャラの大きさ

f:id:ikeball:20210217104012g:plain

AvoidFalling = true, HoleDetectionOffset.x = 1, HoleDetectionRaycastLength = 1

f:id:ikeball:20210217104224g:plain

AvoidFalling = false

AIActionPatrolWithinBounds

 f:id:ikeball:20210214200205p:plain

AIActionPatrol を継承。キャラクターが超えられない左右の境界線を定義できる。

Obstacle Detection

ChangeDirectionOnWall ... trueの場合、壁に当たった時、向きを反転
AvoidFalling ... trueの場合、落下を避ける
HoleDetectionOffset ... 穴の検出を考慮する距離
HoleDetectionRaycastLength ... 穴を検出をするためのキャラの大きさ

Bounds

BoundsMethod ... 境界の判定方法

 BasedOnOriginPosition ... 配置位置を基準

 BasedOnStateEnterPosition ... 状態に入った時の位置を基準
BoundsExtentsLeft ... 左側の最大距離
BoundsExtentsRight ... 右側の最大距離

f:id:ikeball:20210218001204g:plain

BoundsMethod = BasedOnOriginPosition, BoundsExtentsLeft  = 0,

BoundsExtentsRight  = 2 の設定で、2秒ごとに待機、移動を繰り返す。

AIActionShoot

f:id:ikeball:20210214200413p:plain

CharacterHandleWeapon とセットで使用する。

ターゲットの設定が必要です。

使用できる武器は ProjectileWeapon が対象です。

武器を使って撃つ行動。武器がオートの場合、その状態を抜けるまで撃つことができ

セミオートでは1回撃ちます。武器にWeaponAimコンポーネントが付いている場合は、キャラクターをターゲットの左右に向けて照準を合わせます。

FaceTarget ... trueの場合、射撃時にターゲットを左右に向けます
AimAtTarget ... trueの場合、射撃時にターゲットを狙います
TargetOffset ... 照準時にターゲットの位置に適用されるオフセット

f:id:ikeball:20210217215450g:plain

セミオート銃で確認、ターゲットの設定にはAIDecisionDetectTargetRadiusを使用しました。セミート銃の場合は1状態につき1発しか発砲しないようです。

f:id:ikeball:20210217215536p:plain

↑の動画の設定はこちらです。使用した武器は AIShootOnSight の説明で使用したものです。

f:id:ikeball:20210217221949g:plain

武器の設定をオートに切り替えました。

Shoot状態である限り撃ち続ける挙動となります。

条件をみて別状態にし解除する必要がありそうです。

f:id:ikeball:20210217222155p:plain

オート設定はProjectileWeaponのTriggerModeで設定ができます。

AIActionSwapBrain

f:id:ikeball:20210214200727p:plain

実行時にAIBrainを入れ替える。

NewAIBrain ... 入れ替える思考

AIActionUnityEvents

f:id:ikeball:20210214201205p:plain

このアクションは、UnityEventのトリガーに使用されます。

TargetEvent ... 実行されるUnityEvent
OnlyPlayWhenEnteringState ... falseの場合、UnityイベントはPerformActionごとに実行されます(デフォルトではこの状態にある間はすべてのフレームでトリガーされます)

AIDecision

AIDecisionDetectTargetLine

 f:id:ikeball:20210214201532p:plain

TargetLayerレイヤーマスク上のオブジェクトが視線に入った場合にtrueを返す。

また、対象をターゲットとして設定する。

この場合、視線は実際の線になります(レイキャスト)。

また、レイの原点のオフセットと、それをブロックする障害物レイヤーのマスクを指定することもできます。

DetectMethod ... 検出方法
DetectionDirection ... 検出方向(Front 前方, Back 後方, Both 前後)
RayWidth ... キャストするレイの幅 (WideRay モードのみの場合)
DetectionDistance ... 射程距離
DetectionOriginOffset ... レイに適用するオフセット
TargetLayer ... ターゲットを検索したいレイヤー
ObstaclesLayer ... 障害物が設定されているレイヤーを指定

f:id:ikeball:20210217104809g:plain

DetectMethod = Ray, DetectionDistance = 10, TargetLayer = Playerの場合、正面に入ったタイミングでtrueを返す。

f:id:ikeball:20210217110053g:plain

DetectMethod = Ray, DetectionDistance = 10, TargetLayer = Player,

Obstacles = Platforms ← 壁ブロックのレイヤー

壁で視界を遮る設定を設定した場合。壁越しには判定されない

f:id:ikeball:20210217110608g:plain

DetectMethod = Ray, DetectionDistance = 10, TargetLayer = Player,

Obstacles = Nothing

壁で視界を遮る設定をしなかった場合、壁越しも判定が行われる。

AIDecisionDetectTargetRadius

 f:id:ikeball:20210214201556p:plain

TargetLayerのオブジェクトが半径内にあればtrueを返す。

対象をターゲットとして設定する。

Radius ... 検索する半径
DetectionOriginOffset ... 探索円の中心
TargetLayer ... ターゲット対象のレイヤー

AIDecisionDistanceToTarget

 f:id:ikeball:20210214201619p:plain

ターゲットが指定範囲内であればtrueを返す。

ComparisonMode ... 距離の比較に使用するメソッド
Distance ... 判定距離

AIDecisionGrounded

 f:id:ikeball:20210214201645p:plain

地面に接地している場合trueを返す。

GroundedBufferDelay ... 地面にいる時間(秒単位)、この指定分判定を無視する

AIDecisionHealth

f:id:ikeball:20210214201708p:plain

ライフ条件が満たされた場合true返します。

TrueIfHealthIs ... 比較方法
HealthValue ... 比較する値
OnlyOnce ... この判定は一度だけか

AIDecisionHit

 f:id:ikeball:20210214201726p:plain

指定回数条件が満たされた場合trueを返す。

NumberOfHits ... true を返すのに必要なヒット数

AIDecisionLineOfSightToTarget

 f:id:ikeball:20210214210911p:plain

このAIとターゲットの間に遮るもののない場合trueを返す。

ObstacleLayerMask ... 視界を遮る障害物として考慮するレイヤーマ
LineOfSightOffset ... 適用するオフセット

f:id:ikeball:20210218003302g:plain

追跡の設定でプレイヤーとの間に壁がある場合ジャンプするように設定

AIDecisionNextFrame

 f:id:ikeball:20210214210933p:plain

この決定がオンになっている状態に入るとtrueを返す。

f:id:ikeball:20210218003302g:plain

ジャンプした後、もとの状態に戻すように使用

f:id:ikeball:20210218003603p:plain

ジャンプを行ったら元の状態に戻し、次の判定待ちとしています。

AIDecisionRandom

 f:id:ikeball:20210214210956p:plain

乱数を判定して、結果がオッズ値以下であれば真を返します。

TotalChance ... 試行値
Odds ... 判定するオッズ

AIDecisionTargetFacingAI

 f:id:ikeball:20210214211013p:plain

ターゲットがこのキャラクターに向いている場合trueを返す。

AIDecisionTargetIsAlive

f:id:ikeball:20210214211030p:plain

ターゲットが生存している場合trueを返す。

AIDecisionTargetIsNull

f:id:ikeball:20210214211047p:plain

ターゲットの設定がnullの場合trueを返す。

AIDecisionTimeInState

 f:id:ikeball:20210214211105p:plain

Brainがこの決定の状態になってから指定された時間(秒単位でminとmaxの間でランダムに選ばれた値)が経過した後に真を返します。何か他のことをしてからX秒後に何かをするときに使います。

AfterTimeMin ... 真を返すまでの最小持続時間を秒単位で指定します。
AfterTimeMax ... 真に戻るまでの最大持続時間を秒単位で指定します。

f:id:ikeball:20210217102808g:plain

AfterTimeMin = 1, AfterTimeMax = 1を設定した場合、1秒でtrueとなります。

f:id:ikeball:20210217103221g:plain

AfterTimeMin = 1, AfterTimeMax = 3を設定した場合、対象の行動に移った際に1秒~3秒の間でランダムに決まり。その時間後trueとなります。

AIDecisionTimeSinceStart

 f:id:ikeball:20210214211124p:plain

シーンがロードされてから指定された期間 (秒単位) が経過した後に true を返す。

AfterTime ... 真を返すまでの時間 (秒単位)

おわりに

AI向けのアセットは色々ありますが、CorgiEngineに入っている仕組みでもそれなりのことは出来そうだと感じました。すごく凝ったものを作る場合は別の手法を含め検討の必要がありますが、一度CorgiEngineの仕組みを使ってみようと思います。

今後も記事アップしていきたいと思います。

関連記事

ikeball.hatenablog.com

ikeball.hatenablog.com

【Unity】【AssetStore】Sci-Fi Arsenalアセット紹介

f:id:ikeball:20210213115841p:plain

はじめに

宇宙対戦ものゲーム制作に使えそうな弾、エフェクトを発見しましたのでデモの確認をしてまとめました。魔法攻撃、ロボットや、SFにて使えそうなエフェクトが入っています。エフェクトに合わせてSEも入っていました。

 

URP環境への更新にも対応してます。更新方法はドキュメントに記載がありました。

HDRP環境への対応は現在されておりません。

確認環境

Unity 2019.4.16f1

デモシーン

scifi_beams

マウスでクリックした位置にビームが表示されるデモとなっています。

BeamLaserBlue

f:id:ikeball:20210213124349g:plain

BeamLaserRed

f:id:ikeball:20210213124535g:plain

BeamLaserGreen

f:id:ikeball:20210213124629g:plain

BeamLaserPurple

f:id:ikeball:20210213124806g:plain

BeamLaserYellow

f:id:ikeball:20210213124918g:plain

BeamLaserOrange

f:id:ikeball:20210213125012g:plain

scifi_beamup

f:id:ikeball:20210213125443g:plain

scifi_buff

f:id:ikeball:20210213125643g:plain

scifi_fire

f:id:ikeball:20210213125926g:plain

scifi_flamethrowers

f:id:ikeball:20210213130241g:plain

scifi_hexagonzone

f:id:ikeball:20210213130536g:plain

f:id:ikeball:20210213130821g:plain

f:id:ikeball:20210213130941g:plain

f:id:ikeball:20210213131036g:plain

scifi_jetflame

f:id:ikeball:20210213131401g:plain

f:id:ikeball:20210213131232g:plain

scifi_lightjump

f:id:ikeball:20210213131604g:plain

f:id:ikeball:20210213131741g:plain

scifi_loot

f:id:ikeball:20210213131937g:plain

scifi_muzzleflash

 ※mussleflashとは銃口の発射時に表示するエフェクトです。

f:id:ikeball:20210213133623g:plain

f:id:ikeball:20210213133845g:plain

f:id:ikeball:20210213133953g:plain

f:id:ikeball:20210213134147g:plain

scifi_portals

f:id:ikeball:20210213134432g:plain

scifi_projectiles

サンプルシーンではクリックした位置に弾が飛び、左上のバーで弾の速度が調整できました。

BulletBlue

f:id:ikeball:20210213134754g:plain

BulletGreen

f:id:ikeball:20210213135017g:plain

BulletPurple

f:id:ikeball:20210213135124g:plain

BulletRed

f:id:ikeball:20210213135234g:plain

BulletYellow

f:id:ikeball:20210213135352g:plain

BlueLaserSmallMissile

f:id:ikeball:20210213140055g:plain

GreenLaserSmallMissile

f:id:ikeball:20210213140226g:plain

PurpleLaserSmallMissile

f:id:ikeball:20210213141418g:plain

RedLaserSmallMissile

f:id:ikeball:20210213141805g:plain

YellowLaserSmallMissile

f:id:ikeball:20210213141859g:plain

BlueLaserMissile

f:id:ikeball:20210213152035g:plain

GreenLaserMissile

f:id:ikeball:20210213152142g:plain

PurpleLaserMissile

f:id:ikeball:20210213152245g:plain

RedLaserMissile

f:id:ikeball:20210213152341g:plain

YellowLaserMissile

f:id:ikeball:20210213152442g:plain

BlueLaserBoltMissile

f:id:ikeball:20210213152531g:plain

GreenLaserBoltMissile

f:id:ikeball:20210213152628g:plain

PurpleLaserBoltMissile

f:id:ikeball:20210213152727g:plain

RedLaserBoltMissile

f:id:ikeball:20210213152833g:plain

YellowLaserBoltMissile

f:id:ikeball:20210213152930g:plain

BlueLightningMissile

f:id:ikeball:20210213153048g:plain

GreenLightningMissile

f:id:ikeball:20210213153220g:plain

PurpleLightningMissile

f:id:ikeball:20210213153832g:plain

RedLightningMissile

f:id:ikeball:20210213153928g:plain

YellowLightningMissile

f:id:ikeball:20210213154024g:plain

BlueShockwaveMissilev2

f:id:ikeball:20210213154118g:plain

GreenShockwaveMissilev2

f:id:ikeball:20210213154213g:plain

PurpleShockwaveMissilev2

※弾スピード早い

f:id:ikeball:20210213154302g:plain

RedShockwaveMissilev2

※弾スピード遅い

f:id:ikeball:20210213154518g:plain

YellowShockwaveMissilev2

f:id:ikeball:20210213154615g:plain

BlueFireMissileV2

f:id:ikeball:20210213154727g:plain

GreenFireMissileV2

f:id:ikeball:20210213154814g:plain

PurpleFireMissileV2

f:id:ikeball:20210213154905g:plain

RedFireMissileV2

f:id:ikeball:20210213155654g:plain

YellowFireMissileV2

f:id:ikeball:20210213155744g:plain

BlueRocketMissile

※弾スピード遅い

f:id:ikeball:20210213160035g:plain

GreenRocketMissile

※弾スピード早い

f:id:ikeball:20210213160138g:plain

PurpleRocketMissile

f:id:ikeball:20210213160236g:plain

OrangeRocketMissile

f:id:ikeball:20210213160428g:plain

YellowRocketMissile

f:id:ikeball:20210213160521g:plain

BlueSpherev2Missile

f:id:ikeball:20210213160620g:plain

GreenSpherev2Missile

※弾スピード早い

f:id:ikeball:20210213160711g:plain

PurpleSpherev2Missile

※弾スピード遅い

f:id:ikeball:20210213160817g:plain

RedSpherev2Missile

f:id:ikeball:20210213160930g:plain

YellowSpherev2Missile

f:id:ikeball:20210213161020g:plain

BlueSharpMissile

f:id:ikeball:20210213161127g:plain

GreenSharpMissile

f:id:ikeball:20210213161226g:plain

PurpleSharpMissile

f:id:ikeball:20210213161316g:plain

RedSharpMissile

※弾スピード早い

f:id:ikeball:20210213161404g:plain

YellowSharpMissile

※弾スピード遅い

f:id:ikeball:20210213161458g:plain

BluePlasmaMissile

f:id:ikeball:20210213161556g:plain

GreenPlasmaMissile

f:id:ikeball:20210213161638g:plain

PurplePlasmaMissile

※弾スピード早い

f:id:ikeball:20210213161724g:plain

RedPlasmaMissile

※弾スピード遅い

f:id:ikeball:20210213161817g:plain

YellowPlasmaMissile

f:id:ikeball:20210213161919g:plain

BlueSparklerMissile

f:id:ikeball:20210213162001g:plain

GreenSparklerMissile

f:id:ikeball:20210213162053g:plain

PurpleSparklerMissile

f:id:ikeball:20210213162137g:plain

RedSparklerMissile

※弾スピード早い

f:id:ikeball:20210213162234g:plain

YellowSparklerMissile

※弾スピード遅い

f:id:ikeball:20210213162340g:plain

BlueRingMissile

f:id:ikeball:20210213162440g:plain

GreenRingMissile

※弾スピード早い

f:id:ikeball:20210213162525g:plain

PurpleRingMissile

※弾スピード遅い

f:id:ikeball:20210213162617g:plain

RedRingMissile

f:id:ikeball:20210213162710g:plain

YellowRingMissile

f:id:ikeball:20210213162801g:plain

scifi_regenerate

f:id:ikeball:20210213162956g:plain

f:id:ikeball:20210213163045g:plain

scifi_shields

SpinShieldBlue

f:id:ikeball:20210213164546g:plain

SoftShieldGreen

f:id:ikeball:20210213164709g:plain

FogShieldPurple

f:id:ikeball:20210213164823g:plain

YellowSparkleShield

f:id:ikeball:20210213164918g:plain

scifi_swirlyaura

f:id:ikeball:20210213163311g:plain

f:id:ikeball:20210213163437g:plain

f:id:ikeball:20210213163553g:plain

scifi_ultimatenova

BlueUltimateNova

f:id:ikeball:20210213163726g:plain

f:id:ikeball:20210213164339g:plain

GreenUltimateNova

f:id:ikeball:20210213163846g:plain

ModularUltimateNova

f:id:ikeball:20210213164014g:plain

PurpleUltimateNova

f:id:ikeball:20210213164118g:plain

RedUltimateNova

f:id:ikeball:20210213164200g:plain

YellowUltimateNova

f:id:ikeball:20210213164234g:plain

scifi_warpgates

 BlueWarpGateDirectional

f:id:ikeball:20210213165104g:plain

GreenWarpGateDirectional

f:id:ikeball:20210213165208g:plain

PurpleWarpGateDirectional

f:id:ikeball:20210213165307g:plain

update_scifi_6

f:id:ikeball:20210213165542g:plain

BeamUpCloudBlue

f:id:ikeball:20210213165652g:plain

update_scifi_7

 NovaBlue

f:id:ikeball:20210213165912g:plain

 NovaGreen

f:id:ikeball:20210213165751g:plain

NovaPurple

f:id:ikeball:20210213165947g:plain

NovaRed

f:id:ikeball:20210213170015g:plain

NovaYellow

f:id:ikeball:20210213170058g:plain

update_scifi_8

f:id:ikeball:20210213170228g:plain

FlareWhite

f:id:ikeball:20210213170943g:plain

update_scifi_9

f:id:ikeball:20210213171354g:plain

HologramYellow

f:id:ikeball:20210213171853g:plain

update_scifi_10

f:id:ikeball:20210213171621g:plain

WavePortalModular

f:id:ikeball:20210213171727g:plain

update_scifi_11

 ForcefieldBlue

f:id:ikeball:20210213172146g:plain

 ForcefieldGreen

f:id:ikeball:20210213172009g:plain

ForcefieldPurple

f:id:ikeball:20210213172240g:plain

ForcefieldRed

f:id:ikeball:20210213172349g:plain

ForcefieldYellow

f:id:ikeball:20210213172423g:plain

update_scifi_12

f:id:ikeball:20210213172610g:plain

おわりに

f:id:ikeball:20210622202623g:plain

攻撃用から、シールドまで様々なエフェクトが入っていました。

弾のバリエーションが数多く含まれていたのも嬉しいです。

さっそくゲームに組み込んでみたいと思います。

推しアセット

Epic Toon FX

Pixel Arsenal

 

【Unity】【Corgi Engine】UI体力ゲージの調査まとめ

f:id:ikeball:20210206161428p:plain

はじめに

今回はCorgi EngineのUI表示を差し替え方を確認してみました。

調べてみたら初期設定では簡易的な設定になっていますが設定次第で、ダメージを受けた際にアイコンを変更したり、アニメーションをいれたりすることもできそうです。

使用アセット

Corgi Engine - 2D + 2.5D Platformer

作業環境

Unity 2019.4.16f1

ゲージUIの場所

Assets/CorgiEngine/Demos/Corgi3D/NewCorgi3Dのシーンで確認しました。

f:id:ikeball:20210124212502p:plain

Cameras/UICamera/Canvas/HUD が、左上の体力ゲージになります。

f:id:ikeball:20210206203108p:plain

HUDの構成

f:id:ikeball:20210207102056p:plain

JetpackBar ... ダッシュ時に使用しているゲージ

HealthBar ... 体力ゲージ

AvatarBackground ... キツネさん表示の後ろの丸と、体の部分

AvatarHead ... キツネさんの顔

ゲージの仕組み

ダメージを受けた際に体力に合わせてゲージが減っています。

f:id:ikeball:20210207103532g:plain

拡大した時の表示はこちら。

f:id:ikeball:20210207104035g:plain

HealthBarについているMMProgressBarにてゲージ管理が行われています。

f:id:ikeball:20210207102714p:plain

 MMProgressBar

BindingsBindings

PlayerID ... このバーに関連付けられたプレイヤーID(Player1等)

ForegroundBar ... メインで動く、表側のバー

DelayedBarDecreasing ... 値が減った時に表示される遅延バー

DelayedBarIncreasing ... 値か増えた時に表示される遅延バー

f:id:ikeball:20210207151356g:plain

DelayedBarDecreasingに黄色でバーを追加した場合

Fill Settings

MinimumBarFillValue ... 対象の値が0%のときの塗りつぶし量。(0.0 - 1.0)

MaximumBarFillValue ... 対象の値が100%のときの塗りつぶし量(0.0 - 1.0)

SetInitialFillValueOnStart ... 開始時にバーの値を初期化するかどうか

InitialFillValue ... バーの初期値(0.0 - 1.0)

BarDirection ... 向き。デフォルトは左から右。上から下や、右から左も設定可能。

 ※上下に動かす場合は、スプライトの基準位置を上基準、下基準に設定する必要があります。

FillMode ... メインバーを操作するための方法。

 LocalScale/FillAmount/Weidth/Heightの設定が可能

TimeScale ... TimeScaleの影響を受けるかどうか。

BarFillMode ... バーのアニメーションの方法。(スピード固定、時間固定)

f:id:ikeball:20210207152334g:plain

BarDirectionをRihgt To Leftに設定

Foreground Bar Settings

LerpForegroundBar ... フォアグラウンドバーの動きをアニメーションするか

※下記全項目はLerpForegroundBarが有効で表示される。

※下記2項目はBarFillModeがスピード固定の場合のみ
LerpForegroundBarSpeedDecreasing ... 減るときのバーアニメーション速度LerpForegroundBarSpeedIncreasing ... 増えるときのバーアニメーション速度

※下記2項目はBarFillModeが時間固定の場合のみ

LerpForegroundBarDurationDecreasing ... 減るときのバーアニメーション時間

LerpForegroundBarDurationIncreasing ... 増えるときのバーアニメーション時間

LerpForegroundBarCurveDecreasing ... 減るときのアニメーションカーブ設定。

LerpForegroundBarCurveIncreasing ... 増えるときのアニメーションカーブ設定。

f:id:ikeball:20210207200126g:plain

LerpForegroundBarSpeedDecreasing を15→1に変更

Delayed Bar Decreasing

DecreasingDelay ... 減少遅延バーが動くまでの遅延時間

LerpDecreasingDelayedBar ... 遅延バーのアニメーションをするかどうかLerpDecreasingDelayedBarSpeed ... アニメーション速度(スピード固定時)

LerpDecreasingDelayedBarDuration ... 前景バーの各更新にかかる時間(時間固定時)

LerpDecreasingDelayedBarCurve ... 遅延バーのアニメーションカーブ

f:id:ikeball:20210207202208g:plain

上は初期状態のまま、DelayedBarDecreasingを設定した状態

下はDecreasingDelayを1.0 → 1.5、LerpDecreasingDelayedBarSpeedを15→8に設定

Delayed Bar Increasing

IncreasingDelay ... 増加遅延バーが動くまでの遅延時間

LerpIncreasingDelayedBar ... 遅延バーのアニメーションをするかどうかLerpIncreasingDelayedBarSpeed ... アニメーション速度(スピード固定時)

LerpIncreasingDelayedBarDuration ... 前景バーの各更新にかかる時間(時間固定時)

LerpIncreasingDelayedBarCurve ... 遅延バーのアニメーションカーブ

Bump

BumpScaleOnChange ... 値が変更されるときにバンプ拡縮アニメーションをするか

BumpOnIncrease ... 値が増える際にバンプするか

BumpOnDecrease ... 値が減る際にバンプするか

BumpDuration ... バンプのアニメーション時間

ChangeColorWhenBumping ... バンプ時にバーが点滅するかどうか

BumpColor ... バンプ時にバーに適用する色

BumpScaleAnimationCurve ... バンプアニメーションのスケール曲線BumpColorAnimationCurve ... バンプアニメーションのカラー曲線

f:id:ikeball:20210207213528g:plain

違いが分かりやすいように基本の色を白黒に変更しています。

設定は下記の状態となります。

要注意点してアニメーションカーブの設定を行わないと変化が現れません。

設定する値もカナリ大きな値を設定しないと効果が感じられません。

f:id:ikeball:20210207213937p:plain

アニメーションカーブは中央の値にkeyを追加しひたすら上に引っ張りました。

f:id:ikeball:20210207230245p:plain

Events

OnBump ... バンプ時の呼び出しイベント

OnBarMovementDecreasingStart ... バーが減少開始時の呼び出しイベント

OnBarMovementDecreasingStop ... バーが減少停止時の呼び出しイベント

OnBarMovementIncreasingStart ... バーの上昇開始時の呼び出しイベントOnBarMovementIncreasingStop ... バーの上昇停止時の呼び出しイベント
※設定したタイミングでスクリプトを呼び出す設定になります。

 ダメージを受けた際に顔アイコンを変えたりHP〇%以下で点滅とかやれそうです。

Text

バーのパーセント表示を行える設定です。

PercentageText ... 対象のText

TextPrefix ... パーセント文字列の前に表示する文字列

TextSuffix ... パーセント文字列の後に表示する文字列

TextValueMultiplier ... 対象の値に掛ける倍率。100を入れると下記動画の状態になる

TextFormat ... 数字の表示のさせ方。{000}で3桁まで0埋めされた状態で表示される。

f:id:ikeball:20210207222727g:plain

HealthBar以下にTextを追加し設定を行いました。

右くクリックからUI/Textを追加します。

f:id:ikeball:20210207223145p:plain

設定内容は以下のものになります。

f:id:ikeball:20210207223214p:plain

Debug

バーの表示確認デバッグ機能です。

非実行中は「DebugNewTargetValue」で値を変更し「DebugSetBar」で更新

実行中には他のボタンも有効になり、各ボタンに書かれている動作を行います。

DebugNewTargetValue ... DebugSetBarボタンを押したときに設定する値

DebugUpdateBar ... 良く分からず。

DebugSetBar ... DebugNewTargetValueの値にゲージを更新する。

Bump ... 実行中に有効。バンプアニメーションを実行。

Plus10Percent ... 実行中に有効。ゲージの値を+10%する。

Minus10Percent ... 実行中に有効。ゲージの値を-10%する。

Debug Read Only

デバッグ向け値の確認パラメータ

BarProgress ... 現在のバーの値

BarTarget ... 対象の値

DelayedBarIncreasingProgress ... 増加時の遅延バーの値

DelayedBarDecreasingProgress ... 減少時の遅延バーの値

ゲージの追加

f:id:ikeball:20210207144337p:plain

ゲージの関連付けはUICameraにある、CUIManagerにて行われています。

2P向けや、敵、ボス向けの新しくゲージを追加した場合はGUIManagerのHealthBarsに追加する必要があります。

f:id:ikeball:20210207144800p:plain

その後、MMProgressBarのPlayer IDを任意の名前に変更します。

ゲージアイコン変更

f:id:ikeball:20210208012225p:plain

UICameraのプレハブを開き、Canvas/HUD/AvatarHeadの画像を差し替えることでアイコンの変更ができます。

f:id:ikeball:20210208012624p:plain

※上記の画像でAvatarBGと言うのを用意しています。背景の色だけ画像ソフトで切り抜き背景色の設定がUnity上のColorから切り替えられるようにしました。

おわりに

 ここまで確認頂きありがとう御座いました。遅延ゲージと、バンプの使用で初期設定よりは見栄えが良くなりそうだと感じました。CorgiEngineの理解がまた一つ進みました。

今後も記事アップしていきたいと思います。

関連記事

ikeball.hatenablog.com

ikeball.hatenablog.com