【Unity】2048ピース移動の実装(その2)

2019/10/9追記・一部修正 ある程度、準備ができたので、 移動用の計算関数を導入して行こうと思います。 移動の処理は以前作った物を流用するのですが、 Moveがtrueの時に+15のtransformを行っており、 移動するマス数が分かっても、数値を直接入力する事が出来ません。 マス移動をPosition変数から座標を読み取っても、 移動処理を書き直さなくてはダメです。 非常に面倒なので、ここでMathf.Clampを利用したいと思います。 右移動のコマンドを例に posX = Mathf.Clamp(transform.localPosition.x + 15, Min, Max); 現座標+15が移動スピード Minが最小座標 Maxが最大座標 設定では、 Min=-150; Max=150; としているのですが、 この大小値にマス移動の数値を代入してやります。 例えば、Position0にあるピースが計算で2マス移動すると出た場合、 Max=50;としてやれば、それ以上は動かない事になります。 これを元に移動マスの計算を導入してみます。 まず、 private const float Min = -150; //移動範囲下限 private const float Max = 150; …

続きを読む

【Unity】2048ピース移動の実装(その1)

2019/10/18修正 前回、フラフラになりながら移動処理を考えました(;´・`)> ふぅ 修正が多くて申し訳ないです。 今回は、移動処理を実装して行きたいのですが、 いきなり実装はできないので、準備をしていきます。 ポジション毎のピースのナンバーが必要になるので、 管理用のオブジェクトとスクリプトを用意します。 続いて、GameManagerスクリプトを編集します。 GameManager using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameManager : MonoBehaviour { public static int[,] SetNum=new int [4,4]; //ピースNo管理用変数 private bool[,] Flag = new bool[4, 4]; //ポジション毎のピースの有無 // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { …

続きを読む

【Unity】2048のピース移動を考える

2019/10/1追記と一部修正 衝突判定を使ったピースの移動処理を作りましたが、 上手く行ったとは、喜べない状況になっております。 新しく、移動処理を考える必要が出てきたので、 非常に悩んでおります。(_ _ ??)/◇ ワカラン・・・ まず、2048のピース移動の条件を整理してみます。 ・空きマスにはピースが移動できる ・隣あったピースが同数なら結合する ・隣あったピースが3枚なら移動方向の2つのみ結合する ・列に同じピースが4枚なら進行方向の先頭2枚と後ろ2枚が結合する ・結合後に出来たピースと後ろのピースが同じ番号でも結合しない こんな感じでしょうか… 以下の条件でピースがどのようにして動くか考えてみます。 条件 ・枠の左からポジションを0~3とする ・ピース移動は左へ移動する 実際にピースを置いて判別方法を考えてみます。 当然、左端なのでピースは動けません。 コードにすると if(Position==0){停止} 続いて、 左に空きマスがあるので、動かす事ができます。 コードにすると if(Position==1){  if(Position0==空きマス){移動}        } しかし、ポジション0にピースが有った場合、 if(Position==1){  if(Position0==空きマス){移動} else if{…

続きを読む