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とが重なりあっていないかを調べています。
ここで重なりが確認出れば、アニメーションを[Jump]->[idle]に変更しています。
その他-OverLap
先ほどの[Physics2D.OverlapArea]以外にも複数の種類があります。
- Physics2D.OverlapCircle : colliderと円の領域
- Physics2D.OverlapPoint : colliderと点
これを使えば「衝突判定」が簡単にできそうです。 これは今まで知らなかったので今後使えそうな感じがします。
【参考】 Unity - Unity Manual
最後に
今回は「その1」として、ここまでです。 次回は、アニメーションの詳しい中身を勉強してみたいと思います。
日経ソフトウエア 2014年 11月号 日経ソフトウエア 日経BP社 Amazonで詳しく見る |