*

[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

関連記事

logo

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

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

記事を読む

unity ご祝儀

[Unity?]割り切れない関係のためのご祝儀計算シミュレータ

今日、親友が結婚します。 なので、ご祝儀を用意するんですが、相場は3万円ですね。 じゃあ、な

記事を読む

logo

[Unity, C#]曲線を描こう エルミート曲線とベジエ曲線

演出を作る際に綺麗な曲線を描きたいですよね。 というわけでC#でエルミート曲線とベジエ曲線を計算す

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 番外編 これパズドラじゃなくね?

前回の続き。 パズドラみたく直線で3つ以上連なっているときに消したいんです。 そして、何を勘

記事を読む

Unity_

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

前回に続いて、今回はUI Buttonの説明。 公式はこちら まずはHierarchyにUI

記事を読む

Unity_

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

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

記事を読む

Unity_

[Unity]Unity 2Dチュートリアル スプライトをドラッグ(タップ)して移動する

前回はスプライトの簡単な操作を覚えました。 今回はスプライトを移動させてみましょう。 ドラッグして

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 画面上のGameObjectを取得する

前回の続きです。 というわけで移動の仕方は完璧です。本当なら一瞬で移動ではなく、パズドラみたく

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 直線で3つ同色のパズルを消去する

前回の続き。 パズドラじゃなくて、パズドラ+ぷよぷよの謎パズルを作ってしまったので、 今回は

記事を読む

unity moving

[Unity]コードリファレンス Componentを取得する。削除する。

コンポーネントを取得して削除します。 GetComponent コンポーネントの追加と同じよ

記事を読む

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 ↑