趣味のゲーム開発 vol.30
続きから作業していこうと思います!
引き続きキャラクターの動きで気になる部分を修正していきます。
現段階でどうしても気になるのは、下記のポイント。
・左右移動キーを離したのに、ピタッと止まらない
・バックパックでの飛行がもったりしている
・攻撃(射撃)ボタンをCtrlにしていたけど、やっぱりマウスクリックがいいな
順番に修正していきましょう。
ピタッと停止できるようにする
横移動のスクリプトを確認します。
現状では
左右キー入力を取得
↓
移動時間を保持する変数にTime.deltaTimeを加算
↓
AnimationCurveを参照して速度を出す
↓
FixedUpdateにてRigidbodyの加速度に入れる
という感じで処理してました。
何が問題なのか、コンソールに速度などを出力して検証します。
どうやら、移動キーを離した段階で加速度はゼロになっているみたいですね。
じゃあなんでズルズル動くのかというと、摩擦での減速がおそすぎることが原因のようです。
参考記事
摩擦を実装してみる
というわけで、PhysicsMaterial2Dというマテリアルを新たに追加しました。
で、これをプレーヤーオブジェクトのコライダーにアタッチします。
これでテストしたところ、まあまあな動きになりました!
ジャンプ挙動を軽快にする
現在、ジャンプの挙動はUnityのAnimationCurveを利用して制御しています。
ジャンプはじめはゆっくりで、徐々に加速していくよう調整していたのですが
もっと軽快に、現実離れした動きにしたいと思ったので、もう少し調整してみます。
こんな感じに、一瞬限界速度を超えて加速し、その後一定速度に落ち着くように設定してみました!
うん、こちらもまあまあの動きになりましたね。
攻撃をマウスクリックに変更する
これで最後ですね。
現在、キーボードの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 に変更してみました。
すると、何か知らないけどめっちゃ連射してしまうようになってしまいました・・・
とりあえず、次回修正していこうと思います。
ちょっと調べた感じ・・・そもそも、射撃のクールタイムみたいなものを設定してないのが間違いみたいですね。
次回はそのあたりからがんばります!
ではまた!
この記事が気に入ったらサポートをしてみませんか?