先端のマーシーblog

初心者によるゲームプログラミング生活

初心者が2週間かけてUnityで作ったアプリをGooglePlayにリリースしてみる話 第13日目

「終わりの見えないマラソンにいかにして終わりを見つけるのかが、案外一番難しいのかもしれない」

 

こんばんは。

残り1日で終わる訳ねぇだ...という報告は明日にとっておく先端のマーシーです。

 

もう終わりが見えなくても今は走り続けるしかないので、常に作業の手は止めないでいきましょう。

 

 

 

1.ヒットストップの実装

前回までに障害物に当たったら消滅し、スピードは減速するという部分まで組みあがっていました。

 

しかしそれだけでは味気がないと思ったので、衝突した時にゲーム全体の流れを遅くする「ヒットストップ」という手法を取り入れてみようと考えました。

 

ただUnityでは有難いことに標準の関数を少し使っただけでとてもお手軽に実装できたので、方法を調べる手間だけで済みました。

 

参考にしたのはこちらのサイト(Special Thanks!)

gametukurikata.com

 

Time関数の使い方から、とても参考になりました。

 

そうして実装できた結果がこちら。

かなりいい感じに難易度も緩和されて、遊びやすさも向上しましたね。

 

ヒットストップ、今後も覚えておこうと思いました。

 

2.エフェクトの実装

次に障害物に当たった時やスピードアップした時、より視覚的にわかりやすくなればと思いエフェクトを入れようと考えました。

 

自分で一から作るのも可能でしたが、ただでさえ遅れ気味なのに更に時間はかけてられないということでAsset Storeから有料アセット「Polygon Arsenal」を購入しました。

 

人気アセットでよくセール対象にもなっているので、気になる方はぜひ。

 

そうして出来たのがこちら。

かなり完成への道筋が見えてきたのではないでしょうか(リリース基準ではない)

 

現状の課題としては

  • キャラクターのダッシュアニメーション
  • ジャンプ台/落とし穴の実装(2つめのゲームオーバー条件)

くらいになってきたのではないでしょうか。

他にもUIなど課題は山積みですが、ゲーム単体でもせめて最終日には完成させたいですね。

 

ゲーム開発もそろそろ佳境を迎えてきましたが、最後まで走りきれればなと思います。

 

Twitterのフォローよろしくお願いします!

twitter.com

初心者が2週間かけてUnityで作ったアプリをGooglePlayにリリースしてみる話 第12日目

「ゲーム性が上がる毎にテンションも上がるのがゲームプログラミングの楽しさかもしれない」

 

こんばんは。

自分で組んだプログラミングが予想外の動きをするときの原因を1秒でわかる能力が欲しい、「先端のマーシー」です。

 

 

 

1.加速と減速

今回は後々作るゲームオーバーとも関係の深い、加速と減速の処理を実装しました。

 

現時点で考えているゲームの遷移としてはこんな感じ。

  • スピードが0になって止まる
  • 落とし穴に落ちる

これらの場合にゲームオーバーになるようにしたいと考えています。

 

時間経過での加速を行い、ギミックに当たると減速する様に実装しました。

 

それがこちら。

加速から減速までは大丈夫そうですね。

 

ただ動画内にはありませんが減速後に再加速すると、ギミックの生成速度が少しおかしくなっている気がしました。

 

これらの修正も近い内に原因を特定して修正しないといけません。

 

2.細やかな修正

また先程の動画ではわかりにくかったかもしれませんが、ゲーム画面の見た目部分に2つの修正を行いました。

 

  1. 背景ブロックの更に奥に背景を追加
  2. 背景ブロックの横幅を拡大し、建物を追加

 

これはシンプルにゲーム画面に空白が多過ぎ寂しかったからです。

f:id:EdgeOfMarcy:20210919000329p:plain

動かない背景の追加

位置がバラバラな印象を受けるかと思いますが、これは完全に遠近法のせいです。

 

きっちり地面から生やしたものをゲーム画面で見ると、せっかくの無限道路が全く錯覚しなくなってしまったので。

 

という様な細かい事をしていたら時間が溶けていった気がしましたね。

 

また明日も頑張ってゲーム性を高めていきたいとおもいます。

 

進捗などもアップしていくので、Twitterのフォローも是非よろしくお願いします!!

twitter.com

初心者が2週間かけてUnityで作ったアプリをGooglePlayにリリースしてみる話 第11日目

「調整に次ぐ調整、微調整に次ぐ微調整」

 

こんばんは。

作業時間が中々とれなかった今週もあと二日と聞いて驚愕が隠せない「先端のマーシー」です。

 

1.ゲームシステムの微調整

 

今回は、前日の記事でも書いていた通りゲームとは直接関係ない部分の微調整になります。

 

調整内容は以下の通り。

  • 道路と背景ブロックの生成位置のズレを修正
  • 道路の道幅を1.25倍に拡大
  • プレイヤーの移動範囲を道路上だけに限定

基本的なシステムには影響していなかったので手をつけていませんでしたが、いずれ修正しなければならないので一気に直してしまいましょう。

 

今回はスクリプトの変更は座標の位置程度でほぼありません。

全てUnity上でオブジェクトをポチポチして直していきました。

 

これができるのがやはり汎用ゲームエンジン、素晴らしいですね。

 

そして反映したのがこちら。

 

かなり画面が綺麗になりましたね。

またゲーム画面の中で何もない部分も消えてきた様に思います。

 

f:id:EdgeOfMarcy:20210917235303p:plain

9/17時点でのゲーム画面

 

とはいえまだ寂しいですね。

どんどんと要素もこれから追加していきたいと思います。

 

Twitterのフォローもよろしくお願いします!!

twitter.com

初心者が2週間かけてUnityで作ったアプリをGooglePlayにリリースしてみる話 第10日目

「一度作ってしまったものは無限に使い回せるのがプログラムの強み」

 

こんばんは。

勘の良い方は気付いているかもしれませんが、しれっと記事の更新が一日遅れになっております。先端のマーシーです。

 

ワクチンの副反応だけが計画の想定外でした。

という言い訳はさておき。

 

 

 

1.障害物(ギミック)の追加

以前の記事から何度か書いていましたが、漸くギミックの実装に移ります。

 

とは言いつつも、前回まで苦労して作っていた背景ブロックと道路の生成システムを殆ど流用したものなので基本は変わりません。

 

とりあえず初期に生成する障害物はこちらの4つ。

f:id:EdgeOfMarcy:20210916212350p:plain

追加した初期ギミック4つ

 

わかりやすく障害物で良いですね。

これもStudioさんのアセットがあればこそ、本当に有難いです。

 

こちらをキャラクターの移動範囲と被るようにランダム生成し、道路と同じ速度で移動してくれれば要件としては満たしているということになりそうです。

 

ということでギミックそのものには道路と同じスクリプトを、生成の手順についても背景や道路と同じ形式で生成するようにしてみました。

 

それがこちら。

isTrigger(衝突の物理判定)はONにしているのでぶつかっても特に何もなくすり抜けますが。

 

他にもランダムの偏りを関数任せにしても良いのか等の課題はありますが、基本的な形は大丈夫そうですね。

 

ここから第0~1日目で書かせて頂いたようなレベルデザインの作業やブラッシュアップをやっていけたらな、と思っています。

 

2.気になる点

さて、必要なものがゲーム画面に出て色々と気付いてくることもあります。

現時点ではこんな感じ。

  • 道路の横幅がキャラクターに対して、少し狭い
  • 道路と背景ブロックの生成距離が違う
  • 操作方法

上2つは必須ではないかもしれませんが、私が気になるということはユーザーも気になるということ。

 

ただでさえクオリティの面では低いのにユーザー体験まで下げてしまっては何の為に作っているのかわかりませんからね。

 

そして操作方法。

これについてはスマートフォンの操作なので、簡単なタップ操作/ボタン/ジョイスティックのいずれかを考えています。

 

無難なのはタップ操作かジョイスティックですかね。

 

それらの部分についても取り掛かっていけたらなと思います。

 

進捗や雑ツイートなどをやっていますので良ければTwitterのフォローよろしくお願いします!!

twitter.com

初心者が2週間かけてUnityで作ったアプリをGooglePlayにリリースしてみる話 第9日目

「見えない進捗を怠れば、後々に見える綻びとなる」

 

おはようございます。

カッコ良いことを言っている様で実際は目に見えて進んでないことの言い訳をしています、先端のマーシーです。

 

というより、22時更新のルールも1週間で破っているのに何を言っているんだという話ですね。

 

 

 

1.道路生成アルゴリズム・決定版

前回までの記事で道路や背景ブロックの生成方法については書いてきましたが、一つ問題点がありました。

 

それは移動速度を変更した際、特に「速い」から「遅い」の場合に道路の生成が遅れてしまって大穴が開くことです。

 

道路のオブジェクトを重ねれば隠すことは出来るのですが、後々に重大な欠陥となられても困るので修正しておきましょう。

 

処理の流れ

  1. 速度が変更された時に呼び出される関数を作る
  2. 変更前の速度、経過時間を取得
  3. 2で求めた値を掛けて、道路の長さから引き算をすることで残り距離を求める
  4. 変更後の速度と3で求めた距離で、残り時間を算出
  5. 4の時間経過後に道路を生成

といった形です。

文章で書くとややこしいですが、小中学校の数学でやった方程式と「きはじ」の応用ですね。

 

まさか小中学校の知識がこんなにも直接的な形で役に立つとは……

 

その様子がこちら。

 

基本的な速度関連のアルゴリズムについてはこれで大丈夫そうですね。

やっぱりどうすれば解けるかを考えている時が一番楽しい瞬間かもしれません。

 

 

2.背景ブロックの追加

町並みに種類や色どりを加えるため、新たに背景ブロックを追加しました。

左右1個ずつの追加で合計8種類になり、かなり鮮やかになってきたのではないでしょうか(上の動画では既に追加してます)

f:id:EdgeOfMarcy:20210915090804p:plain

新しいブロック

もうあと何種類かは追加しようと思っているので、そちらの方も楽しみにして頂ければと思います。

 

また進捗の動画なども上げていますので、Twitterのフォローよろしくお願いします!!

twitter.com

初心者が2週間かけてUnityで作ったアプリをGooglePlayにリリースしてみる話 第8日目

「細かい部分の修正には終わりがない」

 

こんにちは。

せめてあと1週間は欲しいと毎日の様に思い始めた先端のマーシーです。

 

 

 

1.速度変更の統一

小難しいタイトルを付けましたが、簡単に言うと「道路や背景、ギミックで使用する速度は全て同じものを参照しよう」ということです。

 

道路だけ高速に動いても背景がゆっくりであれば錯覚が起こらずに変なゲーム体験になってしまうので、この部分は必須だと考えました。

 

道路の生成には「RoadGenerator」、背景ブロックは「GameDirector」といったスクリプトに分けていたのですが、速度の参照元はGameDirectorの方に一本化します。

 

参照されるタイミングとしてはこんな感じ。

  • Start(起動した時に、初めの一度だけ実行される)で一度参照。
  • GameDirector側で値が変更された時に参照

Startは初めの速度に用いるので必要ですが、値が変更された時にも各スクリプトに参照してもらわないと新しく生成される道路や建物にしか反映されません。

 

ただしUpdateで毎フレームGetComponentを様々なオブジェクトがしてしまうと一気に処理が重たくなってしまいそうだと考えました。

 

なのでここからは非効率な自分流の解決方法になります。

あまり綺麗な方法ではなく推奨はしませんのでご了承ください。

 

  1. 空のGameObjectを作成する
  2. GameDirectorでGameObjectを取得し、値の変更時にGameObjectの座標を変える
  3. スクリプトでもStart時にタグ検索でGameObjectを取得する
  4. スクリプトでGameObjectを監視し、座標の変更があった時だけ速度をGameDirectorから参照する
  5. GameObjectを元の位置に戻す

 

という方法で解決しました。

 

 

無理やり感は否めないですが、とりあえずやりたいことの実現は出来てそうですね。

 

ただしこの部分でなく前回までの範囲ですが、特に速い速度から遅い速度になった時に穴が開いてしまっています。

背景であれば得に気にすることではないのですが、道路の部分だけは計算して修正した方が良さそうですね。

 

今回の進捗としてはこんな感じです。

とりあえず方針としては背景ブロックの種類増加、道路生成の再計算、ギミックを2.3日の間に完成させれば光明が見えてきます......!

 

Twitterのフォローも是非よろしくお願いします、励みになります!

twitter.com

初心者が2週間かけてUnityで作ったアプリをGooglePlayにリリースしてみる話 第7日目

「残り時間があと半分……?そんなの噓だ……!!」

 

こんにちは。

遂に残す作成期間が半分になってしまいました、先端のマーシーです。

 

期間が決められていると焦りが凄いですが、会社勤めでプログラマーされている方はこの焦りと毎日戦っているのかなと想像して頭が痛いですね。

 

  • 「残り時間があと半分……?そんなの噓だ……!!」
    • 1.背景ブロックの追加
    • 2.背景の移動・ランダム生成

 

 

1.背景ブロックの追加

前回の記事で背景をブロック単位での処理に分けるということで方針を決めていましたが、その種類が少なかったので少し量を増やしました。

 

f:id:EdgeOfMarcy:20210913140059p:plain

追加した背景ブロック

上の段が左の列に生成される建物で、下が右側の建物になります。

初めは左右関係なくプログラムを組んでいたのですが、自動生成システムの挙動でお互いが干渉する不具合が起きていたことから別々にしました。

 

続きを読む