身体はUnityで闘争を求める④自機モデルの一新&壁キックの実装

新規モデル作成

前回の記事から顔をだしていましたが、新しく自機のモデリングをしました。
いつも通り、BlenderでモデリングしてSubstancePainterでぬりぬりしてます。
さくっとスクショだけ。

1機目に比べて物凄くかっこよくなった。我ながら成長を感じる。

壁キックの実装

まずは完成した壁キックをどうぞ。

通常のジャンプとは違い、地面ではなく、壁を使ってジャンプして移動することですね。

では壁ジャンプを実装する上で必要な要素に分解します。

処理実施条件
・機体が空中にいる
・ジャンプボタンが押された
・壁が近くにある
・ジャンプ及び壁キックをした直後ではない

処理内容
・一瞬壁を蹴る為に自機が止まる。
・上方向に上昇
・さらには移動入力にあわせ、水平方向にも素早く移動
・壁を蹴った場所にエフェクト&音を発生させる。

ではまず条件のほうから。
・機体が空中にいる
・ジャンプボタンが押された
 この2つは通常のジャンプと同じ条件である為、特にありません。

・ジャンプ及び壁キックをした直後ではない
 ジャンプしてからの経過時間を、Time.deltaTimeを用いて測定し、一定時間経過するまでは壁キックができないようにする。

・壁が近くにある
 壁との接近を判定する為に、この判定専用のCollider(isTrigger)を用意します。壁との判定にある程度ゆとりを持たせるに、ここではcollisionではなくisTriggerを用います。下図の赤い枠と障害物が重なった場合、壁に触れているものとしています。

次に処理
・一瞬壁を蹴る為に自機が止まる。
・上方向に上昇
・さらには移動入力にあわせ、水平方向にも素早く移動
この3つに関してはrigidBodyのvelocityを操作するのみです。


・壁を蹴った場所にエフェクト&音を発生させる。
この処理の実装が問題です。まず、自機と触れている壁の座標を取得しなければなりません。Collisionであれば、 collider.contactsを用いることでどの座標で接触したかを取得することができます。しかし、今回はisTriggerで判定を行っている為、できません。なので接触している物体そのものの座標と自機の座標の差分から、おおよその接触座標を割り出してエフェクトを出します。この方法で長方形や球等の単純なColliderとの接触箇所の割り出しはうまくいきますが、複雑な Colliderとの接触は、下図のようにうまくいかない場合があります。

赤点が本来エッフェクトを出したい座標で、黄色いパチパチが実際に出しているエフェクトです。terrarianのColliderとの接触の場合は綺麗な位置のエフェクトが出ないと思われます。
とはいえ、こういった細かいビジュアル部分は後回しにして、今回はこのままでよしとします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です