Unity1week(お題:つながる)に参加しつつあります、二日目
デビルハンターとの兼業はつらいぜ。neoacoです。
いつも朝に夫を送り出してから昼まで二度寝してるんですが、今日は寝付けなかったので朝から作業をしました。
大量のスクショを撮ったんですが、詳しく書くような時間はあまりないので、
どれくらいの時間でどんなもんをしたのか、みたいな感じでまとめます。
1.Unityを最新版にする
たしかなんか更新しろってメールが来てた気がするので、その辺のチェックから。
最終的に新しいのを落としてきてインストールすることにしたので40分くらいかかってやる気も萎えてき……が、がんばるぞ!
ということで、Unity 2018.3.8で開発です。
2.最低限の仕組みを作る
まずはプレイヤーが動けばいいよね、という気持ちで、
ざっくりと床とプレイヤーを作ります。
画面のサイズを800*600pxにして(いつもこのサイズで作っている)昨日作った画像を取り込んでsprite Modeをマルチにしてスライス。
床>>
1.切ったスプライトを画面に置く。レンダーのModeをTiledにする
2.BoxColliderを付けてAuto TilingをON
3."ground"というタグを追加して、床材につける
4.この状態でプレハブにする
5.適当に配置する
長さはそれぞれのスプライトレンダーのところにある幅を調整していい感じにする。テキストボックスで式を書いていいのラクチン~~`o´
ジャンプさせたいので高さの違うやつを二つ置いておけば、雰囲気が出ます。プレイヤー>>
1.スプライトエディタで制御点を下の真ん中に変更
2.画面においてポリゴンColliderとRigidBody2Dを付ける
3.ポリゴンが気に食わないので手で修正する(後で絵を差し替えるつもりなので無駄な作業)
次は、とにかく早くプレイヤーに動いてほしいので、
スクリプトを書き始めることにします。
試行錯誤の末に書いたスクリプトはコチラ。
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.おはようございます
もう今日は閉店ガラガラ、ワァオ!
明日は頑張ります。