とあるプログラマの備忘録

都内某所に住むプログラマが自分用に備忘録を残すという趣旨のブログです。はてなダイアリーから移動しました!

Unity2D入門 スクロールアクションゲームを作る キャラクターを動かしてみる

※このブログはUnityの勉強がてら備忘録として残しているものです、ご使用の際には自己責任でお願いします。

前回はキャラクターが動くようになったので、あとは動かせればなんかそれっぽくなりそうなんですけど、
今まで一切ソースを書いてこなかったんですけど、今回遂にソース書いちゃいます!(いやプログラマなんだから書けよ俺)

そのまえに、とりあえずplayerを動かすために3つほどAdd Componentしておきます。

追加するコンポーネントは以下の3つ
・RigidBody 2D
・Circle Collider 2D
・Box Collider 2D

playerのInspectorからAddComponentしてこんな状態にします。

この状態でエミュレートすると、、、キャラクター地面を突き破って下に落ちていきます()
あれ?地面作っておいたのになんでですかね。。

どうやらCubeで作成したFloorは3D用のBox Colliderで今回のこのplayerは2DColliderなんです、
これらは干渉しないため、すり抜けて下におちてしまうそうな。。。

なのでマップ作ったときのFloorに3D用のBox Colliderを消して、Box Collider 2Dこれに変えます。

これでエミュレートすると落ちない!案ずるな受験生!絶対におちないから!

うっすら地面に見えてる緑色の線は地面です。

キャラクターを動かすスクリプトを書く

いまその場で足踏みしているキャラクターを動かせるようにスクリプトを書いてみようと思います。
Project > create > C# Scriptでファイルを作成して、
playerのゲームオブジェクトにAddComponentします。

さて、それではC#ファイルを開いて、以下のスクリプトを追加します。

using UnityEngine;
using System.Collections;

public class playermove : MonoBehaviour {

	private bool isRight = true;
	
	// Update is called once per frame
	void Update () 
	{

	}

	void FixedUpdate ()
	{
		//左右キーの入力
		float h = Input.GetAxis("Horizontal");
		rigidbody2D.AddForce(Vector2.right * h * 300f);
	}
}

void update (){}の下にこんな感じで追加します。

何をしているかと言えばただ、Horizontal(左右)のボタンが押されたら押された方向に
力を加えるというだけのスクリプトです。かんたんですね。

さて、保存したらエミュレートしてみましょう。

おkおk!ばっちり動いているじゃないですか。
結局playerゲームオブジェクトに追加されたスクリプトに力を加える処理さえ書いてしまえば
そのゲームオブジェクトを動かす事ができるというかんじですね。

つい今までのノリで書くと、あれ?playerの指定とか、いらないの?
とかTranceFormに対してなんかしてあげないと行けないの?とかおもいましたが、
そんな事は特に必要ないのですね。


左に移動しようとすると、後ろ向きに走ってる用にみえるので、
playerを反転させて逆向きに動かせるようにします。

先ほどのスクリプトにこれを追加

using UnityEngine;
using System.Collections;

public class playermove : MonoBehaviour {

	private bool isRight = true;
	
	// Update is called once per frame
	void Update () 
	{

	}

	void FixedUpdate ()
	{
		//左右キーの入力
		float h = Input.GetAxis("Horizontal");
		rigidbody2D.AddForce(Vector2.right * h * 300f);

		//右を向いていて、左の入力があったとき、もしくは左を向いていて、右の入力があったとき
		if((h > 0 && !isRight) || (h < 0 && isRight))
		{
			//右を向いているかどうかを、入力方向をみて決める
			isRight = (h > 0);
			//localScale.xを、右を向いているかどうかで更新する
			transform.localScale = new Vector3((isRight ? 2 : -2), 2, 2);
		}
	}
}

この状態でエミュレートしてみると右左に反転してプレイヤーが動けるようになりました。
ちょっと動きが不細工なのが気になるところですが、今回はこれでよしとしましょう。


次回は敵キャラをおいて自動で動くようにしておく。
という所に挑戦していきたいと思います。

Unity関連記事
"Unity" - 記事一覧 - とあるプログラマの備忘録