【Unity2D】コード無しでキャラが段差を乗り越えるようにする方法

この記事は以下のような段差乗り越え方法を解説しています。

爆速で移動できる某ハリネズミ系ゲームを作っていたのですが、大きい段差で止まらず滑らかに乗り越えてほしいと思い
試行錯誤してみました。

よくネットにある記事には段差を乗るときにCapsule Coliderを使うと段差を乗り越えられると書かれています。
しかし、このように腰ぐらいの段差になると乗り越えるのが難しくなります。

今から解決法を書いていきます。
事前に物理演算を使う移動プログラムをアタッチしてください。

以下はプログラムの例です。
using UnityEngine;

using UnityEngine;

//以下は物理演算を使用したプレイヤーの移動スクリプトの例です

public class Player : MonoBehaviour
{
    Rigidbody2D rb;//rigidbody2Dを使います。

       void Start()
    {
        rb = GetComponent<リジッドボディ2D>();//rigidbody2Dの文字がなぜか消えるのでRigidBody2Dに直してください…
    }

    void FixedUpdate()
    {
        if (Input.GetKey(KeyCode.D))
        {
            rb.AddForce(Vector2.right * 10);//Dキーが押されたら右に進む
        }
        if (Input.GetKey(KeyCode.A))
        {
            rb.AddForce(Vector2.left * 10);//Aキーが押されたら左に進む
        }
    }
}



解決法は、EdgeColider2Dを使います。
下の動画はわかりやすいようにキャラを透明にしています。


※うまく乗り越えていませんが対処法を次で解説しています。

①まず、Inspectorからedge colider2D,RigidBody2Dを追加します。
(RigidBody2Dのrotationをロック)

②EdgeColiderの形状を変えます。

③キャラの中心に近いところを押しながら足と同じ高さまで   引っ張ります。そうすると ∇ こんな感じになると思います。

④右端にカーソルを合わせて腰ぐらいまで落とします。

⑤左端も同じようにします。

⑥もしそれで乗り越えない場合(動画と同じ状況の場合)、∇の角度を緩くすると乗り越えるようになります。
つまり、左右の頂点を下におろしつつ、若干左右に伸ばすといけるはずです。

それでは乗り越えるように微調整していきます。

これで乗り越えるようになりました。
後は上半身にbox Colider2Dをつけたり、そのままEdge Colider2DでColiderを調整するのも良いと思います。

しかし、このEdgeColider2Dを使う方法だと当たり判定の枠が少し広まったり、手で調整するので誤差が出る可能性が高くなるデメリットがあります。
それを解決するには段差を乗り越えるコードを書くしかないのかなぁ……。


最後まで見て頂きありがとうございました。


コメント

  1. 動画内で使用させて頂いたアセット
    https://craftpix.net/freebies/free-3-cyberpunk-characters-pixel-art/
    https://craftpix.net/freebies/nature-pixel-art-environment-free-assets-pack/

    返信削除
  2. あくまでこれらの方法は応急処置であり、
    Raycast等で段差検知して瞬間的にy座標を高くする等の方法がおすすめです。
    なぜなら、coliderはUnityで誤作動やすり抜け関連のバグが多発するからです。

    返信削除

コメントを投稿