見出し画像

趣味のゲーム開発 vol.30

続きから作業していこうと思います!

引き続きキャラクターの動きで気になる部分を修正していきます。
現段階でどうしても気になるのは、下記のポイント。

・左右移動キーを離したのに、ピタッと止まらない
・バックパックでの飛行がもったりしている
・攻撃(射撃)ボタンをCtrlにしていたけど、やっぱりマウスクリックがいいな

順番に修正していきましょう。

ピタッと停止できるようにする

横移動のスクリプトを確認します。
現状では

左右キー入力を取得

移動時間を保持する変数にTime.deltaTimeを加算

AnimationCurveを参照して速度を出す

FixedUpdateにてRigidbodyの加速度に入れる

という感じで処理してました。
何が問題なのか、コンソールに速度などを出力して検証します。

スクリーンショット 2021-07-14 15.44.28

どうやら、移動キーを離した段階で加速度はゼロになっているみたいですね。
じゃあなんでズルズル動くのかというと、摩擦での減速がおそすぎることが原因のようです。

参考記事

摩擦を実装してみる

というわけで、PhysicsMaterial2Dというマテリアルを新たに追加しました。

スクリーンショット 2021-07-15 16.27.20

で、これをプレーヤーオブジェクトのコライダーにアタッチします。

スクリーンショット 2021-07-15 16.28.38

これでテストしたところ、まあまあな動きになりました!

ジャンプ挙動を軽快にする

現在、ジャンプの挙動はUnityのAnimationCurveを利用して制御しています。
ジャンプはじめはゆっくりで、徐々に加速していくよう調整していたのですが

スクリーンショット 2021-07-19 10.12.27

もっと軽快に、現実離れした動きにしたいと思ったので、もう少し調整してみます。

スクリーンショット 2021-07-19 10.24.31

こんな感じに、一瞬限界速度を超えて加速し、その後一定速度に落ち着くように設定してみました!
うん、こちらもまあまあの動きになりましたね。

攻撃をマウスクリックに変更する

これで最後ですね。
現在、キーボードのcommandキーで射撃しているのですが、やっぱりマウス左クリックで攻撃できるようにしたいです。

今まではこんな感じで実装していました。

/// <summary>
/// 銃を打つ
/// </summary>
private void ShootGun()
{
    bool isAutomatic = false; // 連射の可不可
    float shootAngle = 0.0f; // 発射角
    
    // プレイヤーの向きに応じて発射角を調整
    if (transform.localScale.x > 0)
    {
        // 右向き
        shootAngle = 0.0f;
    }
    else
    {
        // 左向き
        shootAngle = 180.0f;
    }

    if (isAutomatic)
    {
        // オートマティックの銃
        if (Input.GetKey(KeyCode.LeftCommand))
        {
            Instantiate(bullet, transform.position, Quaternion.Euler(0.0f, 0.0f, shootAngle));
            GManager.instance.PlaySE(shootSE);
        }
    }
    else
    {
        // 単発の銃
        if (Input.GetKeyDown(KeyCode.LeftCommand))
        {
            Instantiate(bullet, transform.position, Quaternion.Euler(0.0f, 0.0f, shootAngle));
            GManager.instance.PlaySE(shootSE);
        }
    }
}

これを
Input.GetKeyDown から Input.GetButton に変更してみました。

すると、何か知らないけどめっちゃ連射してしまうようになってしまいました・・・

スクリーンショット 2021-07-19 12.20.52

とりあえず、次回修正していこうと思います。
ちょっと調べた感じ・・・そもそも、射撃のクールタイムみたいなものを設定してないのが間違いみたいですね。

次回はそのあたりからがんばります!

ではまた!

この記事が気に入ったらサポートをしてみませんか?