見出し画像

[Unity1Week]「ない」をテーマにしたFPSを作りました



1日目 12/23 つくるゲーム決め

GitMindをつかって「ない」から連想するゲームをざっと書き出し。今回はFPSが作りたかったので、そっちに寄っているものをチョイスして決めました。

GitMind

12/23時点では、「音がない空間で、インジケーターUIを駆使して敵を見つけ出して排除していく」ゲームを作ろうと考えていました。

HyperDemonみたいな見た目やらプレイ内容やらのゲーム作りたいなーと思いながら、スポーツ系FPSの動きだけできるようなプレイヤーキャラだけ作成。
ソースはこれつかってます: quake3-movement-for-unity

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

6日目 12/28 再起

最初に決めたゲームを面白く仕上げるイメージがマジで付かなかった上、
仕事納めまで普通に忙しく仕事 -> 寝る -> 仕事みたいな感じだったので進捗0!

でもFPSはなんか作りたかったので、2日で作れる内容を計画。
ざっくりと
・すぐ作れる的当てタイムアタックゲーム -> 敵が「ない」としてこじつけ
・別案: 銃のないFPSから 弓 -> 流鏑馬をテーマに。
・ProBuilderでレベルデザイン! 時間ないのでデフォテクスチャむき出し!

上記決めてからすぐ弓システム -> 的システム に取り掛かりました。

LineRendererのWidthをTweenで縮ませてレーザーっぽく。
破壊エフェクトやSEと相まって個人的に満足。

リセットシステムとステージシステムを組んで実質1日目完了。

7日目 12/29 仕上げ

ホームステージを作成。
・タイトル
・操作説明
・ステージ選択
・感度調整
とすべての面倒かつ必要な機能を集約。メンドクサイUI作成が不要になりハッピー

お次にチュートリアルステージを作成。
ProBuilder活かしてなんかクローズドなステージを作るぞーと意気込む。
どこで覚えたか忘れたが、こんな感じでポリゴン作ったあと天板選んで凹ますとそれっぽいのがすぐできるとかなんとか

天板選んでShift押しながら下にドラッグ

進行についてはていねていね丁寧を心がける。
移動 -> マウス視点移動(感度調整) -> ジャンプ -> 的当て -> ストレイフ


裏テーマとして「ストレイフジャンプの民主化」を持たせようかな…ということで、合わせて見やすいスピードメーターも。

白い足場に白文字白アイコンで見やすいわけねえじゃん!

まあ…ゲージがスピードに応じて色変わるのでそれ見てもらえればOKではある。
黄色、赤色ならなんとなーく加速に成功してるなってことが分かるはず。
(一応あとから黒背景付けたり、スピード線や風切り音追加してFB強化しました)

Stage1をノリで作成.…やべえ!20時まであと10分ぐらいじゃん!
急いでStage1、Stage2(激ムズ)を仕込んで投稿。

Stage2_newとStage3~5は締め切り3時間後に追加アップロード。

8日目 12/30 ちょっと弄る

ゲームのクリアって概念が無さそうだったので、ひとまず目標タイム策定とオンラインランキングシステム用意。

Wipeoutのブロンズメダル、シルバーメダル...みたいな感じで、クリア時にランク提示するとかもできそうだったけど、メンドクサイしステージ選択に書くだけにしときました。

目標:ストレイフジャンプ無しで出せる最速記録から+5~8秒
上級目標: ストレイフジャンプ有り、ショートカット無しで出せる最速記録から+2~5秒

完走した感想

DoomのE1M1作るのってこんな手順多いのか…3dゲーのレベル作成チョーめんどくさそうーっ

といった認識で今回のジャムに臨んだが、
まあ3時間でなんか作れるんなら、時間あればステージのテクスチャ張るくらいは出来そうな気がしてきた

今回は日和って的当てゲーに逃げたが、次はちゃんと動くやつ撃つゲーム作りてぇな。
あとRPGっぽいパラメータ付きのゲームとか。

余談: Unity WebGLにおけるマウス移動量ぶっ飛び問題について

このゲームもFPSの例に漏れず、マウスでカメラ操作を行うのだが、
どうやらWebGL向けにビルドすると、
・Input.Getaxis("mouse x")
・Input.Getaxis("mouse y")
がたまーにぶっとんだ値が帰ってきちゃうタイミングがあるとのこと。
ゲーム側でもたまーに首が180度回転しちゃったりする

https://discussions.unity.com/t/webgl-mouse-input-is-just-completely-broken/930168

特にUnity側で修正は入ってなさげなので、いったんゲーム側にて対応。
「1フレーム中あまりに入力差がぶっ飛んでたら無視」作戦で。一定効果はありそう。

        
// Update()にて呼ぶ関数 
        public void LookRotation(Transform character, Transform camera)
        {
            var mouseX = Input.GetAxis("Mouse X");
            var mouseY = Input.GetAxis("Mouse Y");
            // もし以前のMouseXやMouseYとの値の差が大きい場合は、その値を0にする
       // ---高DPIマウスだと閾値引っかかりやすいので今回不採用---
            if (Mathf.Abs(mouseX - _prevMouseX) > 20f)
            {
                //mouseX = 0;
            }
            if (Mathf.Abs(mouseY - _prevMouseY) > 20f)
            {
                //mouseY = 0;
            }
            _prevMouseX = mouseX;
            _prevMouseY = mouseY;

            float yRot = mouseX * m_XSensitivity;
            float xRot = mouseY * m_YSensitivity * -1;

            // マウス移動量*感度があまりに差があればなかったことにする
            if (Mathf.Abs(yRot) > 50f)
                yRot *= 0;
            if (Mathf.Abs(xRot) > 20f)
                xRot *= 0;

            rotationX += xRot;

            // 左右向きの回転はキャラクターに、上下向きの回転はカメラに適用
            character.rotation *= Quaternion.Euler(0f, yRot, 0f);
            // 上下に上限を設けるbool
            if (m_ClampVerticalRotation)
            {
                rotationX = Mathf.Clamp(rotationX, m_MinimumX, m_MaximumX);
            }
            camera.localRotation = Quaternion.Euler(rotationX, 0f, 0f);
        }

余談: Unity-chan!要素追加経緯

ゲームジャム参加者の方のゲームを何本か触っていく内に気づいたんです、
俺のゲームマジで華がねえっぞ….と

でも絵は描けねぇし描いてもらうコネもコミュ力もねえよー!
….

2020年の年末キャンペーンでもらったやつ

いらっしゃるじゃねえか、ライセンス表記したら自由に使えちゃうカワイイ女の子が.…

ということでSDキャラを落としてきてー…
異空間にカメラと一緒において撮影してRenderTextureに映して右下においてー
あたかもUnityちゃんを操作してる感出すぜ作戦に出ました

撮影場所は床下

ここまで来たらFPS腕も出してぇよなぁ…ということでなんとか腕だけ捥げないか試行錯誤したもののうまくいかず…

Blenderでの成型の仕方今から覚えてたら評価期間終わっちまうよー!ということでProBuilderで適当に腕っぽいなにかを成型

鉢植え?

そして武器の子として持たせてアニメに追従するように。

ごまかせてる...よね...?

あとは
・ボイスも状況に応じて再生。ランダムに再生したり、重要度の高いボイスだけ割り込みさせてみたり。
・キャラの加速度に合わせて揺れ物にForce、位置もちょっと偏らせたり。

すると意外と血が通ってくれた感じが出ました。

ゲーム基礎部分練ってからUnityちゃん導入という流れがまあキレイではあったので、今後もこういう流れにしよっかな。骨しっかり作って肉付け的な

いいなと思ったら応援しよう!