エディトリアルデザイナーのアプリ制作日記

Unityで遊ぶ個人開発者のメモ書き

Unityアクションゲーム制作記 その4 判定、入りました

 モーションのセットがあらかた終わったということで、今回は予定通りプレイヤーキャラに当たり判定をつけていきます。ちなみに差別化をするといっていたコンボですが、ノーマルコンボは、攻撃1:仰け反り、攻撃2:仰け反り、攻撃3:なし、攻撃4:仰け反り、として、走りコンボは、攻撃1:仰け反り、攻撃2:仰け反り、攻撃3:吹き飛ばし、にしました。うん、だいぶゲームっぽくなってきた。
youtu.be

 ということで、実際にどんな作業をしていったかというと……。
f:id:hamazakifactory:20160618200414p:plain
 キャラ本体のCapsule Collider(キャラ移動用)、敵からの攻撃判定用のBox Colliderと鎌の攻撃判定用のBox Colliderをそれぞれアタッチしてくだけです。攻撃判定用のコライダーは、攻撃した(された)時に敵を吹き飛ばさないよう、isTriggerのチェックを入れます。
f:id:hamazakifactory:20160618201126p:plain
f:id:hamazakifactory:20160618201129p:plain
f:id:hamazakifactory:20160618201132p:plain
 この辺はゲーム次第だと思いますが、キャラ本体に細かく判定をつけたい時は、それぞれの場所に判定用のColliderを別途追加するようです。今回はガチの格闘アクションゲームにすることもないので写真下のように本体にBox Collider1つ付けるだけで、十分な感じになっています。
f:id:hamazakifactory:20160618201547p:plain
 ちなみに敵キャラはこんな感じです。
f:id:hamazakifactory:20160618111147j:plain
f:id:hamazakifactory:20160618113428j:plain
 こちらは、キャラクターと同じように本体のCapsule Collider、攻撃判定用のBox Collider、剣のBox Colliderをアタッチしていきます。
 実際の当たり判定の流れはどうしようかと、いろいろググったりいつもの参考サイトを見るにつけ、レイヤーマトリクスの設定によってを行って当たり判定の効率化を少し行えそう。で、ゲーム中に必要な判定を考えてみると、
「プレイヤーの攻撃は、敵本体にしか当たらない」
「敵の攻撃は、敵本体に当たらない」
「プレイヤー&敵の本体は地形に当たる」
「プレイヤー&敵の攻撃は地形に当たらない」
こんなもんかな? ということで、これくらいなら明らかに不要な判定を省けるかなーとレイヤーマトリクスの設定を行ってみます。
f:id:hamazakifactory:20160618202939p:plain
 適当に不要そうなものを選んでチェックを外してますが……大丈夫でしょう、きっと。諸々の設定が終わったので、ようやくオブジェクトの接触が起きてからの処理を組み込んでいきます。まず、必要なのは、以下の2つ。
・プレイヤーの攻撃が敵に当たった
・敵の攻撃がプレイヤーに当たった
 それぞれ接触後に必要な処理は、
・ダメージを加える(いずれ実装)
・受けた攻撃の属性によって「のけぞり」「吹き飛ばし」などのアニメーションを発生させる
 この2つ。処理の流れを作る時に気をつけたのが、「なるべくキャラクター本体に役割を集約させること」でした。OnTriggerEnterで判定を取ったところで諸々の処理せずに、わざわざ処理を回すとオーバーヘッドの時間がもったいないのは確かです。しかし、自分がこれまで作ったアプリでは、とにかくやれるところでやれることを勝手にやってしまって最後に苦労していることが多かったもので……少しは、整理してみようかなと。あと、昔ながらの逐次処理でしか物事を考えられないジジイなもんで、各所でばらんばらんに処理を流してしまうと、全体を把握するのが辛いのです。ということで、まとめたのが下になります。……わかりにくい。でも、こんな程度でもまとめておかないと、後で必ず自分で何をやっていたか忘れて困るのでこれでヨシとしておきます。
f:id:hamazakifactory:20160618203906p:plain
 もう1つ判定系で面倒くさいというか忘れそうなのが、攻撃中にColliderのON・OFFをしなければならないところ。今回の敵の場合でいうと、攻撃のモーションは、下ろしていた剣をいったん振り上げてから振り下ろすというモーションになっています。
f:id:hamazakifactory:20160618173940p:plain
 振り上げ前と振り下ろし後の余韻まで結構な時間があり、全部に判定をつけてしまうとゲームとしてまずいことになります。いろいろ悩んだ末、アニメーションイベントで必要な場所のみにColliderコンポーネントをON/OFFするメソッドを呼び出すことで対応しました。Unityでは、これがベターな方法なのかなー。アニメーションイベントは便利な一方、外から見えにくいこともあって、仕込んだものを忘れたり、仕込み忘れたりすると大変なことになりそう…気をつけなきゃ。
 次は、操作・カメラ系の見直しをする予定。気持ちのいいアクションをするためには……どうしたらいいんだろう。しばし悩んでみます。

※画像は説明用に適当にトリミング・再配置しています。キャプチャー画面をそのまま掲載してありません。あしからず。

Unityアクションゲーム制作記 その3 移動&アタックコンボ

 ということで、キャラクターの移動の補足とアタックコンボの実装です。

youtu.be

 静止状態からの4連コンボと走り後>3連コンボの2つを入れてみました。どちらも見た目は一緒なのですが、いずれ走り後のコンボには最後のアタックに吹き飛ばしをつけたりして差別化をしていきます。

 ちなみにプレイヤーのアニメーションコントローラーの全体図がコレです。見ての通り、ジャンプ要素はバッサリカットしました。操作系はラジコンタイプで、コントローラーパッドの上下で前進・後退、左右で右・左回転です(いまのところは)。

f:id:hamazakifactory:20160616093546j:plain

 Locomotion部分のブレンドツリーは、ユニティちゃんのサンプルそのままです。

f:id:hamazakifactory:20160616093636j:plain

 そして歩行部分の条件はこの通り。※画面は適当に加工してあります。

f:id:hamazakifactory:20160616095129p:plain

  武器を構えた待機モーション(Idol_C)と、武器を下ろした待機モーション(Idol_B)の切り替えに条件はついてませんが、これは単純にIdol_Cを指定時間再生したら自動的にIdol_Bへ移動するようにしたためです。厳密に●秒経ったから待機モーションを切り替える必要もないなら、スクリプトでわざわざカウントする必要もないですしね。

f:id:hamazakifactory:20160616095515p:plain

 コンボ部分はこんな感じ。 攻撃ボタンを制御しているスクリプトからAttackFパラメータがtrueになったらIdol_B&Idol_Cからは、一段目の攻撃へ。移動中(Locomotion)なら移動速度(Speedパラメータ)によって、連続攻撃の発生先を変えます。その後は、アニメーターのBehaviourスクリプトを使い、そこで攻撃ボタンが押されているかどうかを判定して、押されていたらAttackFをtrueにして、二段目、三段目〜と進めていきます。この判定部分をタメや連打に変えることで、バリエーションを増やせそう。

f:id:hamazakifactory:20160616113210p:plain

  ちなみに今回のゲーム制作にあたって参考にさせていただいているのが、かめくめちゃんのゲーム制作ブログ、「Unityを使った3Dゲームの作り方(javascript)」

http://gametukurikata.comです。アクションゲームに必要なネタを、基本操作から丁寧に手順を追って説明してくれているので、とてもわかりやすいです。

 今回も大いに参考にさせていただきました。ありがたやぁ。

Unityのアクションゲームで連続攻撃を実現する方法 | Unityを使った3Dゲームの作り方(javascript)

 次は、敵キャラクターと判定もろもろ。ようやくゲームっぽくなるかな。がんばろ。

Unityアクションゲーム制作記 その2 キャラと背景アセットの確認

 先日購入したアセットを使い、ぼちぼち制作を始めてるのですが、導入アセットでちょこっとだけ気になる点があったのでメモしていきます。ちなみに使用したバージョンは、Unity5.3.5f1 Personalです。

 まずはメインキャラクターの彼女。

Faye

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

 mecanimを使ったサンプルシーンってことで、どんなのかなーと見てみるとユニティちゃんのサンプルそのままが収録されてました。動作確認と一緒にパラメータをいじったり、アニメーションコントローラーはこれをベースにすればいいかとか、使えそうならコントロール系も流用しようかなーとコードを書き換えていました。ただ、キャラ本体のprefabを見てみるとFrontPos以降に謎のオブジェクトかぶりが……(視点制御用の空オブジェクトですね)。

f:id:hamazakifactory:20160614133704j:plain

 本家のユニティちゃんのサンプルでは重複してない&カットしても動作には問題なさそうなので、なんだろーなーと思いつつ削除しちゃいました。インポート時に複製された? そんなことないか。ま、イチからコントロール系のプログラムを作ったり、キャラクターのデータを利用するだけであれば、全く問題ないでしょう。きっと。

  欲をいえば、鎌の向きがイマイチな攻撃のアニメーションを調整したいところですが、そこをやり始めると沼にはまりそうなので、今はあるものを組み合わせることから始めていきます。追加のアニメーションとか修正は、余裕ができたら挑戦ってことで。

 お次は背景アセット。

Tiny Dungeons

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

 インポート後に出たエラーは、標準アセットのEffects&CrossPlatformInputをインポートすることで解消。

f:id:hamazakifactory:20160614150047j:plain

 ちなみにエディタ上で実行したサンプルシーンで見るモバイルとPCでの見た目の比較はこちら(アセットストアにはなかったかな)。

f:id:hamazakifactory:20160614150711j:plain

f:id:hamazakifactory:20160614150725j:plain

 さすがに直接比較してしまうと見劣りしますが、そんなに複雑な地形を作る予定もないしモデル自体のクオリティは納得。こちらも余裕があったらライティングだけでも調整してみよう。うん。

 さて、モデル自体はいいのですが、ちょっと注意しておきたいのがパーツの当たり判定用に用意されているメッシュの壁の高さが低いこと。

f:id:hamazakifactory:20160614171605j:plain

f:id:hamazakifactory:20160614160706j:plain

 写真のように 壁手前にある障害物があって、そのコライダーに乗ってしまうと、するりと壁を抜けて奈落の底へ……。ジャンプなど派手なアクションをするならともかく、移動するだけで落ちてしまうので要注意です。障害物を消去すればジャンプしない限り落ちませんが、判定用のメッシュをいじるか、壁には別途BoxColliderを追加するかしないとですね。この辺は、用途に応じてカスタマイズしろってことで忘れないようにしておきます。

 最後に武器の軌跡エフェクトを追加。

X-WeaponTrail

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

f:id:hamazakifactory:20160614173557j:plain

 鎌(scythe)オブジェクトの下に、X-WeaponTrailのprefabをアタッチ。StartPoint(赤丸)とEndPoint(青丸)を移動させれば、武器の軌跡が表示されるお手軽さ。最初、鎌の刃の部分につけてみたのですが、あまりきれいな軌跡が描けなかったため、武器の柄の部分にアタッチしてみました。武器の形状のせいもあるのですが、微妙にずれるというか、綺麗に出ない…要調整ですな。歩いている時にも軌跡が出ちゃうのはご愛嬌。そのうち直すと思います。 

youtu.be

 ということで、フィールドを走り回れるようになりました。次は、攻撃コンボの実装かなー。ちなみにキャラに入っていた攻撃アニメーションは5個のみ。うまく組み合わせて、コンボバリエーションを増やしたりできるかな……。がんばってみよう。うん。

Unityアクションゲーム制作記 その1 アセットストアでお買い物

 リリースから10日。じわじわとが数が伸びている「夏(karen)恋」をDLしていただいた方に感謝しつつ、3Dアクションの制作を開始しました。3Dアクションといっても広いですから、ざっくりとどんなコンセプトのゲームにしたいかを考えてみると…

・完全なトップビューかTPS寄りのトップビュー(やや見下ろし?)タイプのアクションゲーム

・ゲームフィールドはダンジョン。群がる敵をガシガシ倒して進む!

スマホで片手操作のアクションがしたい!

 うん、ざっくり。細かいことはおいおい詰めていくとして、ゲームで使うアセットを選定していきます。

www.youtube.com

Faye

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

「夏(karen)恋」の制作中から目をつけていた3Dモデル。リアルタッチのモデルも検討したのですが、やっぱりこういうキャラクターが好きなんだよなー。狙ったようなニーソ&大鎌が刺さってポチリました。服のバリエーションがあったり、Mecanim対応のアニメーションも収録されていて、トータルで見て扱いやすそうなのもヨシ。自分でこのクオリティのものはできないし、イチから作ることを考えれば安いものです。

 

www.youtube.com

Tiny Dungeons

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

 アウトフィールドではなく、ダンジョンタイプのマップを進んで行くゲームにしていきたいかなと、ゲーム構成もろくに固まっていないぼんやりとしたうちから背景アセットを購入する暴挙に出てみました。セール中&モバイル対応の文字に惹かれてポチリましたが、このクオリティのものでゲームを遊べるならいいよね。やっぱり開発も、ただの四角を組み合わせたフィールドよりは断然盛り上がります。

 

www.youtube.com

Fantasy Monster - Skeleton

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

 お試しの敵キャラクター。ステキモデルにステキモーションが無料で使えます。有料で別のモデルも販売されているので、問題がなさそうなら追加導入も検討します。

 

www.youtube.com

X-WeaponTrail

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

 剣の軌跡を一瞬で実装できるステキアセット。試してみたところ、動画にある通り実装はとても楽チンでした。

 最後に導入予定のものですが、自分でも扱えそうな手軽さという観点から目をつけているエフェクト系アセットがコレ。

"Shuriken Magic" Effect Pack

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

 デモで見た限り、どのエフェクトもそれほどアクが強くなく使い勝手が良さそう&どんなキャラクターにも合いそうだなぁと思い、第一候補として選出。無料のサンプルもあるので、実際に組み込みながら検討してきます。

 とりあえずこんなところかな。プロトタイプを制作するための材料が概ね揃いましたので、のんびーり作っていきます。うん。

縦書きノベル制作日記 その16 リリース完了!

 昨年の9月から作り続けてきたオリジナルノベルアプリも、先日ようやくリリース完了しました(見るも無残なDL数は見なかったことに…)。

Android 

goo.gl

iOS https://goo.gl/qgZVah

 ひとまず、ご協力いただいた方々、素材を使わせていただいた方々には感謝の念を禁じえません。ノベルエンジン(そんな大層なものじゃないけど)から作ったおかげで、とにかく時間がかかりましたがいい勉強にはなりました。自分の描いた絵がフルカラーで動き、声まで出せるという、8ビットマイコンの時代には想像もできなかったワクワクする体験ができました。

 そして、Unityを使い始めてから1年ちょい。ようやくわからないことが薄ぼんやりとわかってきたように思います。ひと段落ついて、ちょっと燃え尽きていますが、ぼちぼち次に作るアプリを頭の中で、こねくり回し始めました。成り行きまかせで時間をかけてしまうのは、ちょっときついなぁということで、次のアプリでは、以下の3つを目的にさほど時間をかけずにまとめたいと目論んでいます。

  1. Unityでのゲーム作りの基本を覚える
  2. 動画広告を使ったマネタイズをちゃんと組み入れたゲームデザインを考える
  3. C#というものを少しは覚える

 いまさらかよ! という感がありますが、今一度スタートラインに立って頑張ってみようかなと。ちなみに作るジャンルは3Dアクションゲーム。今度は全部自分の手で!なんてことはせず、アセットを有効に活用してまとめ上げていく予定です。

縦書きノベル制作日記 その15 リリースまであと少し!

 昨年の9月から作り続けてきたノベルゲームも、いよいよリリースまであと少しのところまでやってきました。しばらくこのブログもほったらかしだったので、この際だからと、たまの更新ついでにこれまでの状況をだらだらまとめてみます(無駄にながーいです)。


【Live2D_2016】「夏(KAREN)恋 〝好き〟から始まる物語」

映像使用・BGM
Summer sky -夏空-(http://dova-s.jp/bgm/play3363.html
映像使用・背景素材
あやえも研究所(http://ayaemo.skr.jp
きまぐれアフター(http://www5d.biglobe.ne.jp/~gakai/ind...

 

 長期間同じものを作り続けていると、常にテンションマックスで開発を続けられるわけではありません。個人の趣味でやっているならなおさらです。ひとりぼっちでPCに向かっているだけだと、ダウン状態に陥り開発がストップすることもしばしば。そんな状態からやる気スイッチを押し直し、エンジンを掛けるためにはどうしたらいいか。今回の制作を通して、自分がモチベーションを保つためにやってきたことをまとめてみます。

最初の停滞期>制作から2ヶ月経過…面白くないねぇ(2015年11月頃)

 そもそもこのゲームを作ろうとしたきっかけは、「縦書きのビューアーがあったらいいな。昔のゲームブックのように遊び要素も加えられるようなものだと尚良し」でした。そこから、選択肢までのタミングをあまり冗長にせず、テンポ良く読めるようなノベルゲームなら、ゲームとしても面白くなるかなと考えながら発展させていきました。わからないことを調べながら、徐々にやりたいことを組み込んでいけいている時は、テンションも上がります。目に見えて成果が上がりますからね。作り方自体は褒められたものでもないのですが、縦書き表示にスクリプトエンジンなどのシステムを組み込み終わって、一通り完成形が見えてきます。

 で、ある程度出来上がってきたものを振り返って「これ?面白くなるの?」と自問自答してみると……ただのビューアーにチンケなテキストがあるだけでは、面白いもクソもないことに気づきます。もっとも重要なシナリオの未来を見ていない状態で、ゲームとしての評価をするのが間違っているのですが、自分が作りたいのはやっぱりゲーム。簡単なサンプルも書いてましたが、圧倒的にボリュームが足りません。とはいえ、ゲームのシナリオなんて書いたことはないし、頼める人もいない……と、ここで、一回目のスイッチOFF状態になりました。

脱出方法>まったく別のアプリ制作に手を出す

 最初の倦怠期を抜け出すために取った行動は、並行してまったく別の新しいアプリを作り始めることでした。そのとき、自分のtwitterのTLを賑わしていたのがVR。本格的なものは無理として、CardBoard対応くらいなら…と簡単な一発ネタゲームを一ヶ月くらいかけて制作。1本アプリを完成させることで、ダウンしていたやる気ゲージもリフレッシュ。開き直って、これだったらなんとか書けるだろうと設定を練り直し、とりあえず1プレイ10分くらいで読み終わるくらいのボリュームを目指して、シナリオを書き進めていきました。

停滞期その2>シナリオ制作に行き詰る(2016年1月頃)

 成り行きで始めたシナリオ書きでしたが、好きなように好きなことを書いていくことが存外に楽しく、開発へのモチベーションが復活。しかし、所詮基本も全く知らない付け焼き刃のシナリオ書きです。シナリオの構成やら辻褄合わせに苦労していき、1ヶ月、2ヶ月と経過するにつれ、徐々にシナリオを書くペースがダウンしていきます。システムを改修したりなど、別のことをしたりして気分転換を図るも完全に復活ならず。開発のテンションが徐々に下方へ向かっていきます。

  開発は停止ししていないものの明らかに停滞期。テキストのみの作業なので、ビジュアル的にぱっとしなかったのも原因かもしれません。そこで、行ったのが以下の3つ。

 脱出方法1)制作状況をブログで晒す

 おもむろにWebGLでビルドして、本ブログで制作状況を晒すことにしました。具体的にレスが欲しいとかそういうところまで期待はしてなかったのですが、やはり人の目があると錯覚するだけでも「やらなきゃ!」と前へ進める原動力とはなりました。が、モチベーションは微増といったところ。

 脱出方法2)ビジュアルに手を出す

 このゲームに組み込むつもりはなかったのですが、2016年の初め、おもむろに2015年末からインディーズライセンスを大幅に値下げしていたLive2Dを購入してしまいました。購入してからしばらく放置していたのですが、すっかりテキスト作業に飽きていた気分転換に……それまで軽く描いていた挿絵の一枚をベースにしてLive2Dに挑戦してみると思いの外、好感触。「やっぱビジュアルは大事だよね」と作業量の大幅増加も考えず、本格的な導入の検討を始めました。のちに自分の首を絞めることになったのですが、完成しつつあるものを見ていると、無理をしてLive2Dモデルを入れて良かったと言えます。

 脱出方法3)他人を巻き込むことを考え始める

 ビジュアル作業と並行して、さらにモチベーションを上げる&シナリオ作業を加速させるためにキャラクターに音声をつけることを検討します。声を依頼するためには、シナリオを書き上げなくてはなりません。シナリオすべてでなくとも、声を依頼する場所は確定させなければなりませんから。以前勉強会でお会いした声優さんにお願いできたらと、シナリオが書き上がらないうちからなんとなーく打診をしつつ、シナリオの全貌が見えてきた時、退路を断つ意味で正式に依頼。快諾していただきました。人にお願いしてしまったからには、そう簡単にご破算〜とするわけにはいきませんからね。これは「このアプリを完成させたい!」という大きな原動力となりました。

倦怠期その3>作業量に圧倒され始める(2016年3月頃)

 成り行き任せの仕様追加で、作業を進めるうちに「これ、終わらなくね?」というくらい、とにかくやらなければいけないことが多くなってきました。やりたいことをやりたいだけ突っ込んだのですから当然のことです。個人開発なんだから、ながーくやればいいじゃん、といいたいところですが、夏の話のシナリオなので、うかうかしていると来年までリリースができないことになりかねません。とはいえ、来年までモチベーションは保たないのは自分でもよくわかっているので、なんとか区切りをつけてまとめる方策を考えます。ここでやったことは、締め切りの設定とやりたいことの優先順位をつけ直すことでした。

脱出方法>明確な締め切りを決め、優先順位を細かくつけ直す

 締め切りは、ちょうど募集のあった「Live2D Creative Awards 2016」のタイミングに便乗。可能ならコレに応募することを目標にしました。アプリ自体は、ゲームとして最低限の体裁を保てるであろうという要素を洗い出し、スケジュールしだいで継ぎ足していくことにしました。これによって、締め切りから逆算して、それぞれどれだけの時間をかけられるか決め、時間に余裕ができたら追加で要素を入れ込んで作業を考えられるようになりました。こういったところは、まだまだゲーム制作経験が未熟で適当にやってるなぁと思い知らされるところであり、反省したいところです。

優先度 高>

シナリオテキスト:これがないと終われない。

幼馴染二人のモデリング&モーション:どっちかにするわけにもいかず、0がALLかなので、必死に作業する。

タイトル画面:さすがにトップメニューくらいないと不親切。

 セーブ機能などのオプションメニュー:すでにある程度作ってあったので、これはまとめるだけ。

優先度 低>

オープニング演出:起動直後にタイトル画面でもゲーム性に変化が無いため、ナシでも問題無し。

エンディング演出:オープニングと同じく、ゲーム性に影響はないので最悪カット。

ゲーム中の演出と関係ない主人公のモデリング主人公以外の二人は、ゲーム中の演出上、デザイン&モデリングは必須でした。しかし、主人公のモデルを使うとしたらオープング&エンディングのモノローグくらい。必然的に「なくてもいいか」状態でした。今回、主人公の声がないのは「まさか入るとは思ってなかったから」です。

クリア後のボーナス要素:プレイ中に見たモーションやエンディング再生とか、あると嬉しいけどなくてもいいやレベルなもの。

チュートリアル:なくても遊べるシステム…のはず。

そしてリリース直前!

 なんだかんだと言い訳やら理由をつけてきましたが、もっともモチベーションを上げる効果として大きかったのが、いかに「ゲームを楽しんで作ることができる要素を見つけるか」ということでした。そして、リリース直前なのにこんな長文を書いているということは……まさに最後の停滞期だったりします。クオリティを上げるために最後の踏ん張りどころなんですが……あと少し、がんばらなきゃ。うん。

 

 

 

縦書きノベル制作日記 その14 Live2Dモデル 着々と進行中2

 ゲームの演出用に作っていたLive2Dモデル。女の子モデルで予定していた服装の6バリエーション分が、ほぼ完成。あとは、モーションを作りながら、色々調整していくことにします。それにしても思いのほか疲れたー・・・・完成までやるべき事はまだまだあるし、先は長い・・・うん、がんばろ。