neoacoさんの ゲーム作ったよ報告書

いつでも ねむい  げーむ ちょっとつくる

Unity1week(お題:つながる)に参加しつつあります、二日目

デビルハンターとの兼業はつらいぜ。neoacoです。

いつも朝に夫を送り出してから昼まで二度寝してるんですが、今日は寝付けなかったので朝から作業をしました。
大量のスクショを撮ったんですが、詳しく書くような時間はあまりないので、
どれくらいの時間でどんなもんをしたのか、みたいな感じでまとめます。

1.Unityを最新版にする

たしかなんか更新しろってメールが来てた気がするので、その辺のチェックから。
最終的に新しいのを落としてきてインストールすることにしたので40分くらいかかってやる気も萎えてき……が、がんばるぞ!
ということで、Unity 2018.3.8で開発です。

2.最低限の仕組みを作る

まずはプレイヤーが動けばいいよね、という気持ちで、
ざっくりと床とプレイヤーを作ります。
画面のサイズを800*600pxにして(いつもこのサイズで作っている)

f:id:neoaco:20190313193300p:plain
はじめはこんな感じ
昨日作った画像を取り込んでsprite Modeをマルチにしてスライス。
床>>
1.切ったスプライトを画面に置く。レンダーのModeをTiledにする
2.BoxColliderを付けてAuto TilingをON
3."ground"というタグを追加して、床材につける
4.この状態でプレハブにする
5.適当に配置する
長さはそれぞれのスプライトレンダーのところにある幅を調整していい感じにする。テキストボックスで式を書いていいのラクチン~~`o´
ジャンプさせたいので高さの違うやつを二つ置いておけば、雰囲気が出ます。
f:id:neoaco:20190313193342p:plain
床の雰囲気
プレイヤー>>
1.スプライトエディタで制御点を下の真ん中に変更
2.画面においてポリゴンColliderとRigidBody2Dを付ける
3.ポリゴンが気に食わないので手で修正する(後で絵を差し替えるつもりなので無駄な作業)
f:id:neoaco:20190313193418p:plain
プレイヤーについては特に言うことは無い

次は、とにかく早くプレイヤーに動いてほしいので、
スクリプトを書き始めることにします。
試行錯誤の末に書いたスクリプトはコチラ。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerCtrl : MonoBehaviour{

	Rigidbody2D rb;
	float moveRate = 0.05f;
	float jumpForce = 500.0f;
	Vector2 PlayerPosition;
	bool isGround;

    // Start is called before the first frame update
    void Start(){
		rb = this.gameObject.GetComponent<Rigidbody2D>();
	}

    // Update is called once per frame
    void Update(){
		// 移動はWASD式
		// 右
		if (Input.GetKey(KeyCode.D)) {
			// 右に移動したら絵が右を向くようにする
			this.gameObject.transform.localScale = new Vector3(-1,1,1);
			PlayerPosition = this.gameObject.transform.localPosition;
			PlayerPosition.x += moveRate;
			this.gameObject.transform.localPosition = PlayerPosition;
		}
		// 左
		if (Input.GetKey(KeyCode.A)) {
			this.gameObject.transform.localScale = new Vector3(1,1,1);
			PlayerPosition = this.gameObject.transform.localPosition;
			PlayerPosition.x -= moveRate;
			this.gameObject.transform.localPosition = PlayerPosition;
		}
		// ジャンプ
		// フラグをセットしておかないと無限にジャンプできてしまう
		if (isGround == true && Input.GetKeyDown(KeyCode.Space)){
			rb.AddForce(new Vector2(0, jumpForce));
		}
	}

	void OnCollisionEnter2D(Collision2D collision) {
		// 床についているとき
		if (collision.gameObject.tag == "ground") {
			isGround = true;
		}
	}

	void OnCollisionExit2D(Collision2D collision) {
		// 床についていないとき
		if (collision.gameObject.tag == "ground") {
			isGround = false;
		}
	}
}

わかりやすいようにきちんと名前を付けたつもり。
RigidBodyがrbなのは、もう許して、だってこのコンポーネントここでしか使わないんだもん……
とにかく、これをプレイヤーに貼り付けて、ゲームビューで確認。
動くし、良いんじゃないんですか。ね。そういうことにしましょう。

Unityのアップデート後、スクリプト書き終わるまででおおよそ2時間。
さーておひるごはんだ。

3.揺れた…

揺れたね。ちょっと遠かったんでゆっくりユサユサされ、敵にAnimationを付けようとPCとにらめっこしていたneoacoさんは酔って使い物にならなくなり、布団に入ってお昼寝をしました。

4.おはようございます

もう今日は閉店ガラガラ、ワァオ!


明日は頑張ります。