【Unity 2D】2Dユニティちゃんのスクリプトを勉強する-その1

Unity界隈では話題の「ユニティちゃん」に手を出してみました。

ここからすぐに使えるプロジェクトがダウンロードできるのですが、今回は2Dバージョンのスクリプト[UnityChan2DController]を見て勉強をしようと思います。

void Reset()

まずは、[void Reset()]です。 今まで1回も見たことなかったのですが、この[Reset()]では色々な変数の定義をしています。 [c] void Reset() { Awake();

    Debug.Log("  Reset ha kidou ");

    // UnityChan2DController
    maxSpeed = 10f;
    jumpPower = 1000;
    backwardForce = new Vector2(-4.5f, 5.4f);
    whatIsGround = 1 << LayerMask.NameToLayer("Ground");

    // Transform
    transform.localScale = new Vector3(1, 1, 1);

    // Rigidbody2D
    m_rigidbody2D.gravityScale = 3.5f;
    m_rigidbody2D.fixedAngle = true;

    // BoxCollider2D
    m_boxcollier2D.size = new Vector2(1, 2.5f);
    m_boxcollier2D.center = new Vector2(0, -0.25f);

    // Animator
    m_animator.applyRootMotion = false;

} [/c]

調べたとこと、これは[Inspector]を使わずにスクリプト内で初期設定をするメソッドみたいです。 例えば、スクリプト内で、この[UnityChan2DController]コンポーネントとして追加した時に利用するモノです。 ですので、[Inspector]で追加している場合は時に気にしないでいいと思います。

Physics2D.OverlapArea

[FixedUpdate()]内にある[Physics2D.OverlapArea]が全然分からなくて時間を取られました。 この部分で、アニメーションを変更しているのですが、「衝突判定」に関するメソッドみたいです。 [c] void FixedUpdate() { Vector2 pos = transform.position;

    Vector2 groundCheck = new Vector2(pos.x, pos.y - (m_centerY * transform.localScale.y));

    Vector2 groundArea = new Vector2(m_boxcollier2D.size.x * 0.49f,0.1f);

    m_isGround = Physics2D.OverlapArea(groundCheck + groundArea, groundCheck - groundArea, whatIsGround);
    m_animator.SetBool("isGround", m_isGround);
}

[/c]

わかりにくいですが赤い枠の領域layer[Ground]のcolliderとが重なりあっていないかを調べています。

Unity chan000

ここで重なりが確認出れば、アニメーションを[Jump]->[idle]に変更しています。

その他-OverLap

先ほどの[Physics2D.OverlapArea]以外にも複数の種類があります。

  • Physics2D.OverlapCircle : colliderと円の領域
  • Physics2D.OverlapPoint : colliderと点

これを使えば「衝突判定」が簡単にできそうです。 これは今まで知らなかったので今後使えそうな感じがします。

【参考】 Unity - Unity Manual

最後に

今回は「その1」として、ここまでです。 次回は、アニメーションの詳しい中身を勉強してみたいと思います。

日経ソフトウエア 2014年 11月号日経ソフトウエア 2014年 11月号
日経ソフトウエア

日経BP

Amazonで詳しく見る