玉転がしゲーム
引き続きやっていこ~。
大きさ変えたり、他の障害物作ったり
いつの間にか作られていたので作っとく。大きさはInspectorのScaleで変えられる。あとなんかいつの間にかゴールが左の籠になってるな。CircleとSquareのスプライトを作って、それぞれにColliderを付与すればいいのかな。
転がす玉を作る
キーで左右に動き、落ちていくような動きをする玉を作る。
オブジェクトを作る
Circleのスプライトを配置し、Rigidbody2DとCircleColider2Dを付与する。この時点で再生すると、歯車とぶつかった場合にそれもろとも下に落ちていく。
オブジェクトを固定する
玉は動いててほしいが、歯車は動いてほしくない。歯車に動かないような設定を付与する。歯車のRigidbodyにConstraintsという項目があるので、XYにチェック入れる。そのほかの障害物がなぜ当たっても動かないかというとRigidbody2Dが付与されてないから。そのため物理演算の影響は受けず、当たり判定だけが効く。ふーん。
キー入力で玉を動かす
解説をそのままやる。玉のGravityScaleを0にする。NewScriptでコード書く。
public class BallControl : MonoBehaviour
{
Rigidbody2D m_rigidbody;
bool m_fallFlag = false;
// Start is called before the first frame update
void Start()
{
m_rigidbody = GetComponent();
}
// Update is called once per frame
void FixedUpdate()
{
if (m_fallFlag)
{
m_rigidbody.velocity = new Vector2(0, 0);
}
else
{
if (Input.GetKey(KeyCode.LeftArrow))
{
m_rigidbody.velocity = new Vector2(-7, 0);
}
else if (Input.GetKey(KeyCode.RightArrow))
{
m_rigidbody.velocity = new Vector2(7, 0);
}
else
{
m_rigidbody.velocity = new Vector2(0, 0);
}
if (Input.GetKey(KeyCode.Space))
{
m_rigidbody.gravityScale = 10;
m_fallFlag = true;
}
}
}
}
うむ。この{}の使い方が嫌いなんだけどどうにかならんかな。
できた。いぇい!
コメント