ウィンナスのプログラミング忘備録

アプリケーション制作をしている最中に発見したテクニックを忘備録としてまとめていきます。

【ポケモンGO】まもなく配信!ポケモンGOを調べてみた

最近、ツイッターやらニュースやらで流行っている【ポケモンGO

「人気みたいだけど何をするゲームだっけ?」と思い、調べてみました!

 

まずは概要

まずはざっくりとゲームの概要を説明していきます。

ポケモンGOはVR(バーチャルリアリティ)とGPS(位置情報)を使うことでより「現実世界そのものをポケモンワールドにするゲーム」なのです!

つまりだな、その辺の公園とか町中とかでポケモンが出てくるってわけさ!

f:id:win-friendof:20160713223129j:plain

 

人気のポイントは「ポケモンゲットだぜ!」

出てきたポケモンは一体どうすればいいのか?

もちろん捕まえましょう!

どうやら手持ちのモンスターボールをフリックすると捕まえられるようです。

f:id:win-friendof:20160713223835p:plain

ただし!

モンスターボールは無限にあるわけではありません。

モンスターボールは「ポケストップ」と呼ばれる場所で手に入ります。

海外の例を見てみると公共施設に多いようです。

日本だと役所とか駅とかになるのかな?

f:id:win-friendof:20160713224135p:plain

ちなみに課金すれば様々な種類のボールがゲットできるそうですよ!

 

他にもバトルや卵を孵化させることもできる!

※この辺は配信後に詳細を書いていきます

 

神ゲーだけど注意も必要!!

ここまで見ると「歩きスマホ」を助長するゲームにも見えてきます。

実際に海外では「ポケモンGO」による、歩きスマホによる事故や迷惑行為が増えています。

「ポケモンゲーム」米で大人気も…熱中し事故相次ぐ

ポケモンゲーム、慰霊の場ではやめて 米博物館

 

事故ではないけどこんなニュースも飛び込んでいますのでくれぐれもを気をつけくださいww

ポケモンの代わりに死体? 『Pokemon GO』をプレイしていた少女が発見

 

そして最後に、

今週中(1,2日後)に日本でも配信スタートだ!!

みんな乗り遅れるな!

【開発日記:ブロック崩し】第2回 UI周りを実装してみました!

2回目からUnityをいじっていきたいと思います!

今回は、以下の処理についてやっていきます。

  1. UIの配置
  2. プレイヤーの動き

 

UIの設置

まずはUIを決めていきます。

f:id:win-friendof:20160710213306p:plain

こんな感じのpng画像を用意しました!

紺色がプレイヤーになります。

黒い丸が転がすボールになります。

赤青のブロックが崩すブロックになります。

 

この一枚の画像を全てスライスしておきます。

以下の記事を参考にしてください!

【unity】1つの画像をスライスさせてみる

 

スライスしたら以下のように画像を配置しました!

f:id:win-friendof:20160710215953j:plain

一応、上下左右にあるプレイヤーは1つにまとめておきました。

 

プレイヤーの動き

次にプレイヤーの動きを作っていきます。

企画では加速度センサーを使ってプレイヤーを動かします。

以下の記事を参考にしてください!

【Unity2d】加速度センサーを使ってみた

f:id:win-friendof:20160710223115j:plain

4つのプレイヤーに「Box Collider 2D」と「acc_sensor.cs」を付与します。

また、それぞれのタブに「player_top」「player_right」「player_left」「player_bottom」といったタブを付与していきます。

 

では、「acc_sensor.cs」の中身を作ります。

//加速度代入
Vector2 acc_vec;
//速度バイアス
float bias = 13f;
//プレイヤー上下のY座標
float player_y = 4.5f;
//プレイヤー左右のX座標
float player_x = 7f;

// Use this for initialization
void Start () {

}
	
// Update is called once per frame
void Update () {
	//加速度の取得
	acc_vec = Input.acceleration;
	//プレイヤーを動かす
	movePlayer ();
}

void movePlayer(){
	//加速度を受取った場合実行
	if (acc_vec != null) {
		//タブごとに処理を分ける
		switch(this.tag){
		case "player_top":
			acc_vec.x = transform.position.x + (acc_vec.x * Time.deltaTime) * bias;
			acc_vec.y = player_y;
			break;
		case "player_bottom":
			acc_vec.x = transform.position.x + (acc_vec.x * Time.deltaTime) * bias;
			acc_vec.y = -player_y;
			break;
		case "player_right":
			acc_vec.x = player_x;
			acc_vec.y = transform.position.y + (acc_vec.y * Time.deltaTime) * bias;
			break;
		case "player_left":
			acc_vec.x = -player_x;
			acc_vec.y = transform.position.y + (acc_vec.y * Time.deltaTime) * bias;
			break;
		}

		//画面幅を越えたとき軸のポジションを戻す
		if (acc_vec.x > player_x || acc_vec.x < -player_x) {
			acc_vec.x = transform.position.x;
		}
		if (acc_vec.y > player_y || acc_vec.y < -player_y) {
			acc_vec.y = transform.position.y;
		}
		transform.position = acc_vec;
	}
}

 加速度を取得してその数値をポジションに加算します。

また、画面の幅を越えたときにx軸、y軸を戻す処理も加えておきました。

 こんな感じの動きになりました!

 

次回は画面回転の設定やボールの動きをやっていきます!

f:id:win-friendof:20160622000943g:plain

【Unity2D】一時停止を実装してみる

今回は一時停止を実装してみたいと思います。

「3秒後にオブジェクトを動かしたい!」などといった場合に重宝できると思います。

 

実装には以下の方法があります。

  • Invokeを使う方法
  • コルーチンを使う方法

※他の方法もあるけどこれらが使えれば問題ないかな?笑

 

Invokeを使う方法

とりあえず、一番簡単な方法を実装してみます。

まずは、お馴染み(?)ウィンちゃんを設定していきます。

ウィンちゃんにスクリプト「DelayActivity」を設定します。

f:id:win-friendof:20160710190654j:plain

「DelayActivity.cs」を編集していきます。

「Invoke("メソッド名", 秒数)」で一時停止が出来ます。

Vector2 vec;

// Use this for initialization
void Start () {
}

// Update is called once per frame
void Update () {
	Invoke("run", 4.5f);
}

run(){
	vec = this.transform.position;
	vec.y += 1 * Time.deltaTime;
	this.transform.position = vec;
}

 このコードを記述することで4.5秒後にウィンちゃんが1づつ上へ動きます。

しかし、これではrunメソッドに引数を渡すことが出来ないので汎用性に欠けてしまいます。

簡単だけど汎用性に欠けるのがInvokeの特徴です。

 

コルーチンを使う方法

コルーチンは簡単に言えば「1フレーム中断する」という感じです。

Vector2 vec;

// Use this for initialization
void Start () {
}

// Update is called once per frame
void Update () {
    //コルーチンの呼び出し
	StartCoroutine (run(4.5f, 2.5f));
}

//ここがコルーチン(メソッド名、引数は任意で大丈夫です)
IEnumerator run(float delay, float move){
    //ここで何秒待つかを設定します
    //delay秒間中断する感じ
	yield return new WaitForSeconds (delay);

    //ここに行いたい処理を書いていきます
	vec = this.transform.position;
	vec.y += move * Time.deltaTime;
	this.transform.position = vec;
}

このコードを記述することでウィンちゃんが4.5秒後に2.5づつ上へ移動します。

また、runメソッドに「何秒待つか」「どのくらい動かすか」2つの引数を渡しています。

場合によっては引数を増やしたり減らしたりすることが出来ます。

コルーチンを使った方法は「メンドイけど汎用性が高い」といえます。