*

[Unity]Unity2Dチュートリアル 繰り返しパズルを消す

公開日: : Unity

Unity関連記事まとめページはこちら

前回の続き

さて、前回、やっとパズルのような体をかもし出してきましたが、一回しか判定を行っていないので、パズルを消した後にも新たに生成されたパズルがパズドラ並び(直線3つのこと)しても消えてくれません。
というわけで、繰り返し判定して、消せるものが無くなるまで、削除します。

その前に、実は前回説明した、Instantiateメソッドによるクローン作成では繰り返し判定するには問題があります。
GameObjectはCloneされた瞬間にStartメソッドが呼ばれるわけでないので、tileのSpriteRendererがランダムで選ばれず、常にtile_0のrendererが選ばれるため、かならず同じ色になってしまいます。
具体的には以下の動きになります。

[理想]
1.tileを複製する。このtileのrendererは初期値の「tile_0」(オレンジ色)
2.Tile.csのStart()が呼ばれて、SpriteRendererをランダムで選択する。
3.同じ色かの判定をする。
4.違う色が並んで消せなくなったら判定ループを抜ける。

[現実]
1.tileを複製する。このtileのrendererは初期値の「tile_0」(オレンジ色)
2.Tile.csのStart()はフレームが進んで初めて呼ばれる(多分)ので、SpriteRendererが選択されない。
3.同じ色かの判定をする。
4.常にオレンジ色になり、3つ並んで消えたはずのパズルがオレンジ色になり続けて無限に判定を繰り返す。

↓図にするとわかりやすいです↓
Wannabenote

これでは今まで作成した判定メソッドが使えませんね。
というわけで、複製したときにSpriteRendererを入れる必要があります。
しかし、その場合ですと、フレーム移行した瞬間にTile.csのStart()が呼ばれてしまい、折角パズドラ並びがなくなってループを抜けたのにまたSpriteRendererが選ばれてパズドラ並びしてしまうかもしれません。
なので、まずはTile.csを捨てます。Startが邪魔ならスクリプトごと消せばいいじゃない。
Wannabenote
さらにtile_0のPrefabにくっついてるScriptを歯車マークからRemoveComponent
Wannabenote
そしてHierarchyのtile_0からもRemoveComponent
Wannabenote
まぁ、本当はPrefabからtile_0を設置しておけば一括で削除できるんで便利なんですけどね。
行き当たりばったりだから仕方ないです。

そして、今度はGameSystemのScriptのフィールドを追加。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class GameSystem : MonoBehaviour {
	private const int TileLineNum = 5;
	private const int TileColNum = 6;
	private const float TileWidth = 0.5f;
	private const float TileHeight = 0.5f;
	private const float FirstTilePosX = -1.5f;
	private const float FirstTilePosY = -2;
	private int[,] tileTable = new int[TileLineNum,TileColNum];
	private bool[,] deleteTable = new bool[TileLineNum, TileColNum];

	public Sprite[] Tiles;
	public GameObject TileObj;
	public GameObject holdObj;
	public float holdPositionX;
	public float holdPositionY;
	private float z = 10f;
	private GameObject[,] tileSet;

public Sprite[] Tiles;を15行目に追加しました。

そして、UnityでHierarchyのGameSystemを選択して、TilesプロパティのSize6に。そしてElement 0から6にそれぞれスプライトをドラッグ&ドロップ
Wannabenote

準備完了です。あとはソースだけですね。
ソースではGameSystemのStart()メソッド内で初期のパズルの色選択と、判定を繰り返すように処理を追加します。

が、長くなってきたのでまた次回。

次回更新しました→[Unity]Unity2Dチュートリアル 繰り返しパズルを消す その2

ad

関連記事

Unity_

[Unity]Unity4.6リリース 翻訳的な何か有り

http://unity3d.com/unity/whats-new まだ全然扱えていないのに

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 同じ色のパズルを消去する

前回の続き。 さて、そろそろパズドラみたいにパズルを消すロジックを考えていきましょう。 パズ

記事を読む

unity

[Unity]コードリファレンス GameObjectを親子関係にする。

親子関係にして、親が動いたら子も動くような動きをさせます。 transform.parentプ

記事を読む

Wannabenote

[Unity]Unity2Dチュートリアル 繰り返しパズルを消す その2

Unityまとめページはこちら。 前回の続き。 準備が出来たので、ソースを変更致しましょ

記事を読む

Unity_

[Unity]Unity4.6 UIチュートリアル Lesson4.UI Image 日本語要約

前回の続き。UI Imageの説明。 公式はこちら。 Image(Script)の説明です。

記事を読む

socket p2p unity

[Unity]Socket通信でP2Pすっぞ ホストへ接続

前回はホストが待ちうけするところまで作りました。 今回はクライアントがホストへ接続できるように

記事を読む

logo

[Unity]コードリファレンス ソケット通信の開始して接続して切断する。

オンラインゲームを作るためにはソケット通信が必要です。 今回はいきなりソースから。解説は下の方に。

記事を読む

instantiate cube unity

[Unity]コードリファレンス GameObjectの複製

GameObjectを複製します。 Object.Instantiate(Object ori

記事を読む

Unity_

[Unity]Unity4.6 UIチュートリアル Lesson6.UI Events and Event Triggers 日本語要約

前回の続き。 ついにずっと画面で見えていた謎のEventSystemに触れます。 なんか

記事を読む

Unity_

[Unity]Unity2Dチュートリアル スプライトを利用する その2

前回で、タイルを置いて、全部消えちまうじゃねぇか! 色一個一個つけるのめんどくせぇ!! というところ

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑