Study Works

YuukiHiraiの勉強したものを上げていきます。

UnityでTPSアクションゲームを作る 第3回 前半

今回は敵の処理を作っていこうと思います。

前半と書いたのですが、敵のAIを作成する際にどういった設計にしようかとても迷ってしまい、2週間ぐらいかかりそうだと思い分けました。

あたり判定はプレイヤーと敵との距離を確かめて判定していく感じですね。
Colliderであたり判定をとることもできますが、アクションゲームでは判定が正しく行われないことがあるので距離による判定が一番安定して行えると思います。

敵のAIについてですが、こちらのビヘイビアツリーという考え方を主軸にやっていこうと思います。

f:id:yuukihirai0331:20170423220305p:plain

UE4の画像で申し訳ないのですが、こんな感じです。
Unityでビヘイビアツリーを調べるとこのあたりの記事が分かりやすいと思います。

幻塔戦記グリフォンの AI で使っている Behaviour Tree | Aiming 開発者ブログ

seesaawiki.jp


すいません、じつはまだブログでまとめるほどできていないので来週に深い解説と設計をしたいと思います。

本当に申し訳ありません。

よろしくお願いいたします。


Unreal Fest West 17「モバイルモバイルゲームにもっとクオリティを! UE4を使ったハイクオリティなモバイルゲーム制作について」レポート

先日「Unreal Fest West 17」に参加してきました。

unrealevent.jp

その中で一番興味深かい「モバイルモバイルゲームにもっとクオリティを! UE4を使ったハイクオリティなモバイルゲーム制作について」についてのレポートを書きます。

f:id:yuukihirai0331:20170416102302j:plain

 

現在、UE4で開発されたスマホゲームで有名なのは「Hit」でしょう。

mobile.nexon.co.jp

スマホゲームでよく開発に用いられているのはUnityやCocos2d-xが主流ですが、

韓国で「リネージュ2」や「BladeⅡ」などUE4を採用したゲームを見ると今までのスマホゲームと一線を越えるものが数多くあります。

ここでスマホの性能をざっくり表にしました。

f:id:yuukihirai0331:20170416192337j:plain

今までのスマートフォンゲームはたくさんの人に遊んでもらうため、平均より低めの性能のスペックを考慮して開発を行われていました。しかし、このようにスマホの性能は上がってきていてそれを考慮したうえでクオリティを上げて開発をしなければなりません。

ということでゲームのクオリティを上げるにはUE4の採用を検討した方が良いというセッションでした。

しかし、まだUE4を採用した日本製のスマホゲームはまだ出ていません。

なぜ、採用しないのか私の考えを上げていきます。

1、前例がない

2、学習コストがかかる

3、ロイヤルティがかかる

といった3つに分けられると思います。

 

1、前例がないというのは日本ではその前例がなく、ノウハウがないことを指します。ユーザーのデータを管理するサーバとの連携やUnityでいうところのアセットバンドルなど作るだけでなく、サービスしていくことを考えると保守性にかけるといったところがあります。
しかし、DLCという形でネットワークを介した配布はできるようなのでこれをうまく使えば出来そうです。

unrealengine.hatenablog.com

 

2、学習コストがかかるのはもちろんですが、ドキュメントが豊富なのとUE4専門会社のヒストリアさんは新卒に「Unreal Engine 4で極めるゲーム開発」を2週間ぐらいでやっているということで職種によって異なりますが、基礎は2週間ぐらいで学ぶことが出来ます。

www.borndigital.co.jp

 

3、ロイヤリティというのは一定以上の売り上げが発生した場合、売り上げの5%をEpicに支払うということを気にする企業が多く、できればUnityのようなライセンス方式で一定金額を支払って成功しても金額が変わらないというのが理想です。
そのようにしたい場合、応相談次第で出来るかもしれません。Unityのライセンス料と同じかは保証はできません。詳しくは下記に

カスタムライセンス


といった感じでしょうか。
個人的に日本のスマホ市場にUE4が採用されることを願っています。

UnityでTPSアクションゲームを作る 第2回

一週間ぶりですね。

あれから仕事終わりにコツコツと作った進捗の動画をアップロードしています。

youtu.be

今までキャラの移動はスクリプトで書いていたのですが、今回からはRootモーションによる移動や回転を中心に行っていきます。

docs.unity3d.com

あとはブレンドツリーを使ったりなど

docs.unity3d.com

全体図はこんな感じです。

f:id:yuukihirai0331:20170409220757p:plain

歩行アニメーションが歩くモーションと走るモーションのブレンドでしています。

f:id:yuukihirai0331:20170409221008p:plain

攻撃アニメーションはイベント処理(ダメージなどどのアニメーションから派生するモーション)で実装しています。攻撃モーションは複数存在するのでサブステートで一括にまとめています。

f:id:yuukihirai0331:20170409221458p:plain

攻撃アニメーションの際、アニメーションイベントを入れてHitの処理を入れています。

docs.unity3d.com

f:id:yuukihirai0331:20170409221800p:plain

ソースコードはこんな感じ

>||

public class PlayerAction : MonoBehaviour {

Animator Animator;

bool isNextAttack = true;
int AttackCount = 0;

void Start()
{
Animator = GetComponent<Animator>();
}

void Update()
{
//アクションボタンが押されたときフラグが立っていたら
if (Input.GetButtonUp("Action")&&isNextAttack == true)
{
//アニメータのカウントに代入
Animator.SetInteger("AttackCount", AttackCount);
//攻撃アニメーション開始
Animator.SetTrigger("isAttack");
//攻撃し終えるまでフラグを下ろす
isNextAttack = false;
}
}

public void Hit()
{
//ヒットした時の処理
}

public void Next(int num)
{
//攻撃判定が終了して次に移行可能状態
isNextAttack = true;
AttackCount = num;
}

public void End(int num) {
//攻撃処理終了
AttackCount = num;
}
}

||<

大雑把ですがこんな感じでソースを書いて先ほどの全体図のアニメーションレイヤーのパスに割り当てていきます。

今回はこんな感じで来週は敵の処理を入れていこうと思います。

UnityでTPSアクションゲームを作る 初回

このブログの更新から約一年ぐらい離れていましたが、久しぶりに更新します。

私もこの4月より新社会人ということで何かやらねばと思い、ここに日々の進捗や

技術を載せていこうかと思います。

実は去年の12月にAndroidでゲームアプリを公開しまして、その経験を生かしてモバイルゲームの開発を行っていこうかと思っています。

play.google.com


※容量が大きくダウンロードはおすすめできません(正直、消したい…)

実際に開発するゲームのイメージ

f:id:yuukihirai0331:20170402210701j:plain

実は下のやつのまんまなのですが…

https://www.assetstore.unity3d.com/jp/#!/content/80585

なかなか良い感じのゲームが作れそうだなぁと思い

https://www.assetstore.unity3d.com/jp/#!/content/83694

https://www.assetstore.unity3d.com/jp/#!/content/80146

https://www.assetstore.unity3d.com/jp/#!/content/63772

のアセットを使ってゲームを作っていこうかと思います。

このブログでは実際に使ってみた技術とか紹介していこうかと思います。

皆さんの参考となる記事ができればと思います。

Live2D Unity導入方法まとめ

今回は、Live2DをUnityに導入の仕方をまとめていきます。

実際の導入方法は公式のドキュメントにて詳しく解説されていますが、今回は少し掘り下げた導入方法を解説していきます。

Unityでグリグリ動かしてみよう - Live2D Cubism 2 マニュアル

しかし、公式のドキュメントではモーションの導入方法があまり解説されていませんでした。

 

1、実装の仕組み

naotaroさんのブログにてLive2Dの導入の仕組みを解説しています。

より詳しくLive2Dを実装していきたいと考える人はこちらのブログを参考にすると良いと思います。

Live2DのUnity版でシンプル実装 - Qiita

 

2、ジョーカースクリプト

Live2DをUnityで導入するうえで一番手軽に出来ると思います。

サンプル付きで難しい設定をしなくても手軽に実装することができます。

Live2Dを使ってみよう - ジョーカースクリプト|Unityで動くノベルゲーム開発環境

 

3、参考書
これからLive2Dを実際に使っていきたいと思う方はこなべさんが執筆したこの書籍を参考にすると良いです。

この書籍ではモデルの使い方からアニメーションの作り方やそれらの実際の運用方法が解説されています。

私自身もLive2Dを使う上でとても参考になった書籍です。

Unity5+Live2D ノベル&アドベンチャーゲーム開発講座 (SMART GAME DEVELOPER)

Unity5+Live2D ノベル&アドベンチャーゲーム開発講座 (SMART GAME DEVELOPER)

 

 

まとめ

現在Live2DはとてもUnityと相性が良く、プログラマでなくてもデザイナーがアプリを制作できる良い環境になっています。

これからのゲーム業界において「プログラマだから~出来ない」「デザイナーだから~できない」といった考え方が通用しなくなると私は思います。

なので、あまりに枠に囚われすぎず様々技術を習得することが大切だと私は考えています。

 

 

 

初心者向けUE4エフェクトの作り方 炎

今回作成するエフェクトは炎のエフェクトです。

youtu.be

↓のUnityのエフェクト本を参考にUE4.11で再現してみました。

www.shoeisha.co.jp

1、エフェクトで使用するテクスチャを用意します。

今回は私が制作したテクスチャを使います。
(自由に改変、使用してもらって構いません。)

↓ダウンロード先

Textures_Fire

 

2、これら三枚のテクスチャをプロジェクト内にインポートします。

 

3、それぞれのテクスチャよりマテリアルを作成します。

f:id:yuukihirai0331:20160516220155p:plain

 

4、それぞれのマテリアルを開きます。

f:id:yuukihirai0331:20160516220714p:plain

このような画面が出ます。

 

5、画面左下の詳細パネルのブレンドモードを「加算」にし、

シェーディングモデルを「Unlit」にします。

f:id:yuukihirai0331:20160516221142p:plain

今回のマテリアルにはアルファ値を加えるため加算にしています。

そして、エフェクトにはシェーダーをかけないようUnlitにしています。

 

6、画面右上のバレットより「ParticleColor」をマテリアルノードにドラッグ&ドロップします。

f:id:yuukihirai0331:20160516223617p:plain

ParticleColorはエフェクトの色彩を変えるために用意します。

 

7、Mキーを押しながら左クリックして「Multiply」を出します。

f:id:yuukihirai0331:20160516224110p:plain

Multiplyは2つの値(A,B)を掛け合わせます。

 

8、これらを使い、図のようにノードを組みます。

f:id:yuukihirai0331:20160516224717p:plain

 

9、画面左上の「適用」を押します。

f:id:yuukihirai0331:20160516224940p:plain

 

10、それぞれのマテリアルごとに4~9を行い、3つのマテリアルを作成します。

 

11、「パーティクル」を作成します。

名前は「P_Fire」にしておきます。

f:id:yuukihirai0331:20160516225552p:plain

 

12、P_Fireを開きます。

f:id:yuukihirai0331:20160516230000p:plain

 

13、炎の原型を配置します。
Required」を選択し、「Texture_Aura」で作成したマテリアルを選択します。

f:id:yuukihirai0331:20160516230224p:plain

これで表示されるパーティクルに作成したマテリアルを設定しました。

 

14、炎の密度を増やします。

Spawn」を選択し、「Rate→Distribution→Constant」を「40」に設定します。

f:id:yuukihirai0331:20160516231230p:plain

Rateは1秒間にX個出現させるのかを設定できます。

 

15、炎が自然に消えていく感じにします。

Lifetime」の「Min」と「Max」を「0.5、1.2」に設定します。

f:id:yuukihirai0331:20160516232145p:plain

Distribution Float Uniformとは最小値と最大値のうちからランダムに値を設定します。

 

16、さらに自然な形に整えていきます。

Initial Size」のStart SizeMax[50,0,50]にし、Min[25,0,25]にします。

f:id:yuukihirai0331:20160517093915p:plain

これで縦と横のサイズを50~25の間のランダム値にすることで不自然さが多少解消されました。

 

17、炎の色彩を加えていきます。

Color Over Life」を選択し、「Constant Curve」の「Points」を追加して0~3を作ります。

f:id:yuukihirai0331:20160517100254p:plain

 

18、図のように0~3に設定していきます。

0はアルファ値を0に設定します。

f:id:yuukihirai0331:20160517102526p:plain

 このようにすることで時間の経過に伴い、黄色から赤に色が変化します。

 

19、炎のサイズを少しずつ小さくする。

エミッタ画面にて「Size」より「Size By Life」を選択します。

f:id:yuukihirai0331:20160517152800p:plain

 

20、「Size By Life」を選択し、「Out Val」を図のように設定します。

f:id:yuukihirai0331:20160517161318p:plain

Pointsの0にOutVal[1,1,1]を入れ、Pointsの1にOutVal[0,0,0]を入れることで出現時からだんだん小さくなるようになっています。

 

21、炎の出現位置をランダムにする。

エミッタ画面にて「位置」より「Initial Location」を選択します。

f:id:yuukihirai0331:20160517162223p:plain

 

22、「Initial Location」を選択し、「Max」と「Min」を設定します。

f:id:yuukihirai0331:20160517162539p:plain

Start Locationにより、炎の出現位置をランダムにすることで自然な感じになりました。

 

これにより、炎のメインとなる部分は完成しました。

これからアレンジを加えていきます。

 

23、炎に舞う火の粉を作っていきます。
エミッターからエミッタを複製します。

f:id:yuukihirai0331:20160517163812p:plain

 

24、火の粉の原型を配置します。

13と同じく「Required」を選択し、「Texture_Par」で作成したマテリアルを作成します。一応、わかりやすくするため最初に作った炎の原型は非表示にします。

f:id:yuukihirai0331:20160517164345p:plain

 

25、14と同じように「Spawn」を選択し、「Rate→Distribution→Constant」を「100」に設定します。

 

26、15と同じように「Lifetime」の「Min」と「Max」を「1.0、2.0」に設定します。

 

27、「Initial Size」のStart Size[6,6,6]にします。

f:id:yuukihirai0331:20160517165055p:plain

 

これにより炎の火の粉が舞う演出が出来ました。
最後に炎の煙を作っていきます。

 

28、煙の演出を加えていきます。

23と同じく炎のメインを複製し、13と同じくRequired」を選択し、「Texture_Smoke」で作成したマテリアルを選択します。

 

29、14と同じようにSpawn」を選択し、「Rate→Distribution→Constant」を「」に設定します。

 

30、15と同じように「Lifetime」の「Min」と「Max」を「1.0、1.2」に設定します。

 

31、Initial Size」のStart Size図のように設定します

f:id:yuukihirai0331:20160517171028p:plain

 

32、Initial Velocity」の「Start Velocity図のようにします。

f:id:yuukihirai0331:20160517171446p:plain

 

33、Color Over Life」を選択し、「Alpha Over Life」の「Points」を追加して0~2を作り、図のように設定します。

f:id:yuukihirai0331:20160517172506p:plain

 

34、Size By Life」を選択し、Points」の0~1を図のように設定します。

f:id:yuukihirai0331:20160517173030p:plain

 

これで煙の演出が完成しました。

f:id:yuukihirai0331:20160517173536p:plain

 

まとめ

・「Required」は原型となるパーティクルの設定を決めます。

・「Spawn」は出現数などの設定を決めます。

Lifetime」は生存時間の設定を決めます。

Initial Size」は出現時のサイズを決めます。

Initial Location」は出現時の位置を決めます。

Color Over Life」は時間の経過に伴い、色彩の変化を設定できます。

Size By Life」は時間の経過に伴い、サイズの変化を設定できます。

・"Distribution Float Uniform"は最小値と最大値を設定することでそれらの値のランダム値を設定できます。

 

お疲れ様です。

参考にしていただきありがとうございました。

今までYouTubeに上げてきたゲーム動画まとめ

第5回 UE4ぷちコン に応募した作品です。

historia.co.jp

 

全国のゲーム部主催のGameJamにて制作したゲームになります。

www.youtube.com

 

内定先で開かれたMiniGameJamで制作したゲームです。



今後も開発したゲームはYouTubeに上げていきますのでよろしくお願いします。