新規モデル作成
前回の記事から顔をだしていましたが、新しく自機のモデリングをしました。
いつも通り、BlenderでモデリングしてSubstancePainterでぬりぬりしてます。
さくっとスクショだけ。
自作ロボゲー用のモデル制作。
SubstancePainterめっちゃ強い。無料体験期間で使ってるけど、購入方法がよく分からない・・・。月額で使ってれば恒久版にアップグレードできるのか? pic.twitter.com/LruHaPq2JM— ねくすと@VRChat (@Next_gamer) 2019年2月11日
自作ゲーム用2代目オリメカ。Blenderで作成してUnity上で操作してます。早くもっとかっこいい武器を持たせてあげたい。 #オリメカ #オリロボ #blender #unity3d pic.twitter.com/qoYKIYspAu
— ねくすと@VRChat (@Next_gamer) 2019年2月20日
1機目に比べて物凄くかっこよくなった。我ながら成長を感じる。
壁キックの実装
まずは完成した壁キックをどうぞ。
通常のジャンプとは違い、地面ではなく、壁を使ってジャンプして移動することですね。
では壁ジャンプを実装する上で必要な要素に分解します。
処理実施条件
・機体が空中にいる
・ジャンプボタンが押された
・壁が近くにある
・ジャンプ及び壁キックをした直後ではない
処理内容
・一瞬壁を蹴る為に自機が止まる。
・上方向に上昇
・さらには移動入力にあわせ、水平方向にも素早く移動
・壁を蹴った場所にエフェクト&音を発生させる。
ではまず条件のほうから。
・機体が空中にいる
・ジャンプボタンが押された
この2つは通常のジャンプと同じ条件である為、特にありません。
・ジャンプ及び壁キックをした直後ではない
ジャンプしてからの経過時間を、Time.deltaTimeを用いて測定し、一定時間経過するまでは壁キックができないようにする。
・壁が近くにある
壁との接近を判定する為に、この判定専用のCollider(isTrigger)を用意します。壁との判定にある程度ゆとりを持たせるに、ここではcollisionではなくisTriggerを用います。下図の赤い枠と障害物が重なった場合、壁に触れているものとしています。

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

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