プログラミングしたことない人がゲームを作ってみる備忘録

プログラミング経験ゼロから頑張っています。

初めてのオリジナルゲーム「ダンジョン脱出」①

まずはフィールドを。
Planeで床を作りました。
f:id:gardenlove:20180706173013p:plain
4×5マスの、ごく小さなフィールドです。

そして、人に見立てたCylinderをこの世界に降り立たせました。

f:id:gardenlove:20180706173147p:plain
このCylinderは自分自身なので「Me」と名付けました。

f:id:gardenlove:20180706173156p:plain
さて、このMe君に物理属性を与えます。
といってもよくわからないので、前回のボールゲームで作ったラケットととりあえず同じように作ります。フィールド上を、プレイヤーが入力したキーによって動くのは大差ないと思ったからです。動きが変だったら、あとで調整です。

f:id:gardenlove:20180706173201p:plain
というわけで、こんな感じの値にしました。

さてお次はスクリプトです。

public class Me : MonoBehaviour {
    private float accel = 1000.0f;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        this.GetComponent<Rigidbody>().AddForce(
            transform.right * Input.GetAxisRaw("Horizontal") * accel,
            ForceMode.Impulse);
		
	}
}

ラケットと全く同じです。
とりあえずこれで動かしてみましょう。

うん。
ラケットの時は何とも思わなかったですが、人だと思うと動きが早すぎです。キレッキレです。あと、左右には動きますが、前後には動きません。そりゃそうだ、ラケットはそういう設定でした。
動きをどう変更したいかというと、
・矢印キーを入れた時のスピードを遅くする
・前後(z方向)にも動かしたい
・できればドラクエのように1マスずつ動いてほしい
こんな感じです。

まず、前後の動きの実現です。
ググりまくって、こんな感じにしました。

public class Me : MonoBehaviour {
    private float accel = 20000.0f;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        float x = Input.GetAxis("Horizontal") * accel;
        float z = Input.GetAxis("Vertical") * accel;
        GetComponent<Rigidbody>().AddForce(x, 0, z);

    }
}

すると、前後にも動き始めました!
数字もちょこっと変えてあります。