【Unity】アクションゲームでプレイヤーを動かすときに思った事【Rigidbody】

a girl playing fetch with a german shepherd その他
Photo by Thirdman on Pexels.com

雑談みたいな記事になると思うので、適当に聞き流していただけると幸いです。

(自分の)1年前は基本的にRigidbodyのVelocityをいじってプレイヤーを動かしていました、こんな感じ。

void FixedUpdate()
{
    rigidbody.velocity = new Vector3(speedX, rigidbody.velocity.y, speedZ);
}

しかし、これは公式だと非推奨だったようです(FPSのジャンプなどの処理に使うのが正しいらしい)。

ただ、初心者はこれでも良いんじゃないかなと思います、現在3DでAddForceでの移動を挑戦して、ある程度まともな動きが出来るようになりましたが、結構調整が難しいです。

なんなら公式のStandard Assetでもvelocityに代入して動かしていた気がする。

個人的に思うアクションゲームでのVelocityを弄る問題

Velocityを弄れば便利ですが、これだと出来なくなるであろうことがあります(できたらごめんなさい)。

それは、横や前へのバウンドです。

と言ってもパッと例が思い浮かばない…どうしよう…近くで爆発したときに吹き飛ぶみたいな感じ…?代入してなければAddForceで適当に吹き飛ばせばそれっぽくなるはず…。

あと、書いてる途中で気づきましたが、他のRigidbodyとColliderを持つオブジェクトから押されても恐らく殆ど動きません、代入してしまっているので。

先程のコードは

rigidbody.velocity = new Vector3(speedX, rigidbody.velocity.y, speedZ);

という感じで、velocityのXZを直接代入してしまっています。

velocityを代入してしまっているので、上書きされてしまい、代入した動きしかできません。

ちなみに、Y軸は自身のvelocityの値を代入しているため影響は受けないのでジャンプやトランポリンなどの真上に動く処理はバッチリできます。

(個人的)AddForceの1番の壁

めっちゃ滑ります。対策が必要です。

その点Velocityではガッツリ止まってくれます。

摩擦を弄ると…

摩擦を弄って滑らなくしても良いのですが、そうすると壁に引っかかってしまったりします。

参考になるサイト様。

ステージ作成&「引っかかり問題」の解決
前回まででゲームのシステム部分と見た目部分がほぼ完成しました。これでようやくステージ作りに着手することができるので、張り切って作っていきましょう。ステージ作成では、早速ですが必要なだけステージを作っていきましょう。ただまあステージ作りに関し

難しい。

余談

自分の成長の為に、現在作っている3DのゲームではVelocityを使わない方針でやっています。

成長のためとはいえ、無駄かなとも思いましたが、今さっき試しに坂道から障害物が転がってくるステージを作ったところ、物理演算の影響を受けて妨害される処理を作ることができたので、多少は無駄ではなかったっぽく少し安心しました。

芸が細かくなるような挙動にしたいときはAddForceでこだわってみるのは大アリだと感じました。

ただ、滑るのを何とか抑えている訳なので、そこでの抑える力は結構大きく、これにより遠くに吹っ飛ぶなどの処理は少し難しくなります。

吹っ飛ぶような処理を作る場合は、吹っ飛んでいる判定を追加して、抑える力を弱めたりしたら結構良い感じになるかな~…。

コメント

タイトルとURLをコピーしました