今回プロなろというグループでチーム開発を行いました!
ジャンプキングに似たやりこみのあるゲームになっています
https://t.co/yICRFcW2oE
— ようさん (@ayousanz) 2021年9月12日
Unity1weekのゲーム公開しました!
地形と反射を駆使してクリアを目指しましょう!
⁰腕に自信のある方はタイムアタックにも挑戦してみてください!
イベントアニメーションたくさん入れたので探してみたください#unity1week #indiedev #IndieGameDev #unityroom pic.twitter.com/4W7e3Snf8e
Repositoryは公開しているので,細かい実装はRepositoryを参照ください
https://github.com/ayutaz/u1k-pronarogithub.com
(注) : 実装説明により一部ゲームのネタバレ等含みます
開発環境
- Unity 2020.3.17f1
- Github(主にCI/CD用)
使用アセット(関連するもののに記載)
UPM
Asset Store
イベントアニメーション
各画面のイベントアニメーション
各画面にて以下のようなゲームイベントが存在します
これらを実装するために,以下を採用しました
タイトルの背景アニメーション
ゲーム開始時のアニメーション(ゲーム画面)
ゲームクリア時のアニメーション(ゲーム画面)
クリア画面の背景アニメーション
ゲームオーバー画面のアニメーション
実装方法
こちら基本的には DOTweenを 以下の方法で使用してイベントアニメーションを再生しています
- Sequenceを生成して,任意のところで再生
- trasform.DO~をUniTask型に変換して,awaitで前の処理が終わるまで待機
タイトルは Sequenceで実装しているので,以下のように実装しました
_sequence = DOTween.Sequence() .Append(transform.DOJump(new Vector3(3.65f, _firstYPosition, 0f), 0.3f, 10, 10f)) .AppendCallback(() => characterDialogue.SetView(true).Forget()) .AppendCallback(() => _rigidbody2D.bodyType = RigidbodyType2D.Dynamic) .Append(transform.DORotate(new Vector3(0f, 0f, 360f), 5f, RotateMode.FastBeyond360)) .AppendCallback(() => { characterDialogue.SetView(false).Forget(); //ループ対応 Reset(); }); _sequence.Restart();
ゲームの開始時のアニメーションはDOTweenをawaitしています
public async UniTask StartEvent() { await FallHole(); await SetStartPosition(); await Conversation(); } private async UniTask FallHole() { player.DORotate(new Vector3(0f, 0f, 360f + 180f), 5f, RotateMode.FastBeyond360); await player.DOMoveY(-911f, 5f).ToAwaiter(); } private async UniTask SetStartPosition() { player.DOJump(new Vector3(-45f, -900f, 0f), 200f, 1, 3f); await player.DORotate(new Vector3(0f, 0f, -180f), 3f).SetRelative(true).ToAwaiter(); } private async UniTask Conversation() { await playerCharacterDialogue.SetView(true); playerCharacterDialogue.SetContent(firstConversationContent[0]); await UniTask.Delay(TimeSpan.FromSeconds(WaitBetweenConversationTime)); playerCharacterDialogue.SetContent(firstConversationContent[1]); await UniTask.Delay(TimeSpan.FromSeconds(WaitBetweenConversationTime)); await playerCharacterDialogue.SetView(false); }
ゲームのクリア情報のツイート機能
こちらの記事を参考に実装しました
画像のツイートは,できない時とできるときがあり調査時間がなかったため文字のみになりました
クリア時間のランキング機能
unity roomのランキングはnaichiさんが公開されているものを使用させていただきました
時間は 〇分〇秒で表示したかったのでフォーマットを mm:ss
に設定しています
開発運用(CI/CD)
今回の制作ではGithub Actionsを使って,テストとビルドを自動化しました
前に記事を書いたので,そちらを参考にしてみてください
https://ayousanz.hatenadiary.jp/entry/2021/05/27/%E5%80%8B%E4%BA%BA%E9%96%8B%E7%99%BA%E3%81%A7Github_Actions%E3%81%A7Unity%E3%81%AECI/CD%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F_%E3%80%90Unity%2CGithub_Actions%28game-ci%29%E3%80%91ayousanz.hatenadiary.jp
設計
1週間の期間ですが,設計をある程度意識して実装をしています
UniRx,UniTaskを使ってMV(R)Pで実装をしています
各シーンのクラス図は以下のようになっています
タイトルシーン
ゲームシーン
ゲームクリアシーン
ゲームオーバーシーン
またフォルダは一応(めっちゃあいまいですが)ドメインごとにわけました