【Unity】2048をスマホで試してみた

2048を作ってみて、少し頭がパンクぎみで 1週間ほどサボってました(;^_^A ぼちぼち勉強を再開して行こうと思うのですが… その前に2048をアプリにして操作した時の 問題点を書こうと思います。 操作や得点には問題も無く、無事にゲームが出来ているのですが、 あるタイミングでフリックやタップをするとバグが出ます。 実は、ピース生成の際に少し問題があります。 ピース移動中のフリックをキャンセルする為、 GameManager側でbool型変数のcreateを使用しています。 この変数をfalseにするタイミングが微妙な為、 バグが発生しております。(ノ_<。)うっうっうっ GameManager //空きマスからランダムに2カ所を選ぶ public void SelectPosition() { List list = new List(); //空きマスを取得する変数 int num = 2; //ピースの生成回数 int rot = 0; //ピースの生成カウント int limit=0; //空マスのカウント for(int i = 0; i <…

続きを読む

【Unity】スマホのフリック判定がおかしい

2019/10/19追記・修正 2048も完成したので、スマホにビルドしてみました。 開始早々、問題が発生しました! タップするとピースがフリーズします。 (・_・;)エー これは、原因が分からない状況でっす。 仮説を立ててみます。 ・マウスと指ではポイントの面積が違う ・タッチ始点と終点の差が読み取れていない ・計算上、上下左右の値が同じだと判断できない イマイチはっきりしません(T^T) ヒック そもそもフリック量って、どれくらいあるのか分からないので、 調査する事にしました。 フリックの計算コードを見ると 終点-始点で差が30より大きい方を読み取っています。 Unity上では30でも、スマホ上では値が小さい事や そもそもの読み取り座標が違うかもしれないので、 フリック調査用のアプリを作成しました。 スクリプトはこんな感じです。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class FlickManager : MonoBehaviour { private Vector3 touchStartPos; //タッチの始点取得変数 private Vec…

続きを読む

【Unity】2048スコアの実装

2019/10/18追記 いよいよ最終のスコア実装でっす。 スコアの実装なんて今までの処理に比べたら楽勝ρ(^^ )♭ と高を括っていたのですが… 適当に実装して、PLAYしたらとんでも無い事になりました。 移動後に残っているピースの点数を合計していったら、 あっと言う間に天文学的数字に ( ゜.゜) ポカーン こんなスコアの入り方でしたっけ( ̄~ ̄;) ウーン 少し調べないと行けません。 Google先生にお伺いを立てたのですが、 どこにもスコア計算の情報が出ておりません。 更に調べると、どうやら結合したピースのみ得点するようです。 そら、全部のピースを合計したら天文学的数字になるはずでっす。 (~-~;)ヾ(-_-;) オイオイ 完全に舐めてました。 改めて実装していきます。 エディターでテキストのオブジェクトを設置から もはや適当に作ってますが、こんな感じで良いでしょう。 このテキストをスクリプトから操作すれば無問題。 スクリプトを修正していきます。 GameManager using UnityEngine.UI; public class GameManager : MonoBehaviour { private int SCORE=0; //スコア private int HI_SC…

続きを読む

【Unity】2048ゲームオーバーの判定

操作系の処理も完成して? バグとか出そうな気もするのですが… ま、完成したと言うことにします。 (;^o^) \(ToT )あんたほんとにそれでいいの いよいよ大詰めのゲームオーバーの処理を作って行こうと思います。 2048のゲームオーバーは ・全マスが埋まる ・ピースが動けない状態 この二つを判定する必要があるかと思います。 さて、どのタイミングで判定をするかが問題かと… ピース移動の度に呼び出すと重くなりそうですし、 ピース生成の度に呼び出すのもちょっと… 少しフローもどきを見て流れを考えます 全ての流れはSelectPosition()で終了を迎えます。 更にこのメソッド //空きマスからランダムに2カ所を選ぶ public void SelectPosition() { List<int> list = new List<int>(); int num = 2; int rot = 0; for(int i = 0; i < 16; i++) { if (Flag[i] == false) { list.Add(i); } …

続きを読む

【Unity】2048ピース移動中のフリックキャンセル

2019/10/15追記・修正 2019/10/18追記②・削除 フリック入力の調整ができました。 かなり複雑なので、うまく説明できないかもしれませんが、 書いていきたいと思います。 ピースの移動中にフリック入力ができてしまう! このスクリプトには致命的な欠陥です。 ピースのポジションを確認しながら移動計算を 行う為、移動中の座標を読み込むとエラーが発生します。 なのでフリック入力管理は必須事項でっす。 以前、ピースの移動判定、 Move=true なら入力をキャンセルしていましたが、 ピース毎にスピードが違い、先に停止したピースは、 入力を受け付けてしまう事になります。 ピース全体の動きを認識させるにはどうすればいいのでしょう… 少しコードの流れを見てみる事に… フローと呼べるほどの物でもないんですが、 流れを図にしてみました。 コードだけを見ていると分かりにくいのですが、 図にすると見えてきそうでっす(^ё^) ♪♪ 各ピースの共有部分は、GameManager側の移動検知~ピース生成までです。 フリック入力後、ピースが生成されるまでキャンセルを掛ければ対応できそうです。 まず、フリック入力を判断するようにしてみます。 PieceManager private bool input ; //フリックの入力フラグ …

続きを読む