技術的なやつ

技術的なやつ

7.1 Unity2DでSTG作る日記 1日目

職場でUnityを使うことになったのと、個人的に作りたいものがあるので、いろいろテストしていく日記にしようと思う。日記なので、雑多な感じで書いていく。

最後にUnityを触ったのがカラオケ採点機を作った時で、完全に仕様とか忘れているので、色々と躓きながらの作業だった。

f:id:ibako31:20141203014847j:plain

なお、使用しているのはUnity2D(v4.3.3f1)である。少し古い。

とりあえず、画像のインポート

「どうするんだっけ?」となっていたので調べた。プロジェクトフォルダのAssets内に置けばいいらしい。素材にしたい場合、Spriteとかいうものになるらしいので、Assetsフォルダの中にSpritesフォルダ作成。Spritesってなんなんだ。
で、以前DXライブラリで作っていたやつの素材フォルダを、すべてぶち込んだ。Unityに戻ると、正常に読み込まれた。平和に解決。

ドラッグ&ドロップでプレイヤー0のスプライトをSceneに突っ込む

画面上に追加された。Hierarchyに「0」とかいう名前のオブジェクトがある。あー、思い出してきた。
オブジェクトの名前をPlayerに変更。

当たり判定を付ける

Playerを選択して、InspectorからAdd Component -> Box Collider 2D。でも、これアクションゲームじゃないから、Colliderは要らないかもしれない。まぁ、よく分からんけど今は付けておこう。当たった瞬間をスイッチとして起こすイベントとか書けると思うし、たぶん。

操作できるようにする

サークルの後輩のスライドを頼った。Add Component -> New Script(C Sharp)。ファイル名はとりあえずPlayerにした。
スクリプトについて。デフォルトではAssets直下に配置されるので、Assets以下にScriptsフォルダを作り、ついでにSpritesフォルダと同様のフォルダ構成にして、Scripts/player/Player.csとした。

public class Player : MonoBehaviour {	
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
       		float x = Input.GetAxis("Horizontal");
	        float y = Input.GetAxis("Vertical");
	        this.transform.Translate(new Vector3(x, y));
	}	
}

Input.GetAxisで入力を受け取って、this.transform.Translateで座標を更新するっぽい。詳しくは調査してない。
実行する。はやい。制御できん。スピードをつける。

public class Player : MonoBehaviour {
	public float Speed { get; private set; }

	// Use this for initialization
	void Start () {
       		Speed = 0.2f;	
	}
	
	// Update is called once per frame
	void Update () {
       		float x = Input.GetAxis("Horizontal");
       		float y = Input.GetAxis("Vertical");
       		Vector3 v = new Vector3(x, y) * Speed;
	        this.transform.Translate(v);
	}

}

移動速度はいい感じになったけど、なんか、移動に慣性がついてるような…。
this.transform.Translateが悪いのかな?というわけで書き換える。

public class Player : MonoBehaviour {
	public float Speed { get; private set; }	

	// Use this for initialization
	void Start () {
       		Speed = 0.2f;	   
	}

	// Update is called once per frame
	void Update () {
       		float inputX = Input.GetAxis("Horizontal");
	        float inputY = Input.GetAxis("Vertical");
       		Vector3 newPos = this.transform.position + new Vector3(inputX, inputY) * Speed;
	        this.transform.position = newPos;
	}	
}

なんか、これでも慣性がついてる。ということは、Input.GetAxisの戻り値に慣性が付いてる可能性がある?
と、ここで時間が無くなったので終了。
Assets/Scenesフォルダを作り、test.unityとして現在のシーンを保存。てか、採点機作ってる時は1シーンだけでやってたし、遷移とかよく分かってないなぁ。

感想

そういえばUnityってこんなのだった。
ネット上の情報は割と偏っているので、書籍買ってちゃんと勉強したいなぁ。