149cmプログラマ-

お仕事できるように勉強するー。

パズドラみたいなパズルゲーム[Unity]2記事め

きょうは、移動が出来るようになった!
縦横ナナメ移動。(たまに動かない時もある・・・)

クリックイベントの取得

クリックが効いてない、と思ったら、コライダを追加していなかった。。
BoxCollider2Dというものがあるので追加。
そうすると、OnMouseDown () OnMouseDrag () が、ちゃんと動くよ!
次回、ブロックを削除して落下、連鎖させます。

Unityの親子。★transform.parent とgameObject

gameObject.transform.parent.gameObject.transform.gameObject.transform.gameObject・・・・。
永遠に繰り返せるという話。

transform ←gameObject & transform →gameObject

まず、

transform ←gameObject

gameObject から、transform にアクセスするには
gameObject.transform

transform →gameObject

transform から、gameObjectにアクセスするには
transform.gameObject

親子のgameObjectがほしい時

子(ぜんぶ)

for(int i=0; i<transform.childCount; i++){
    Transform childObject = transform.GetChild (i);
}
//childCount:子要素の数

GameObject parentObject = gameObject.transform.parent.gameObject;

transform とgameObject

あれ。あれ。子がTransform で、親がGameObjectになってた。 上に書いたやつ。

逆のは

gameObject.transformとかでアクセスしていけば、

子のGameObject

取得したいのがgameObjectだったら、

for(int i=0; i<transform.childCount; i++){
    GameObject childObject = transform.GetChild (i).gameObject;
}

親のTransform

Transform parentObject = gameObject.transform.parent.gameObject.transform;

・・・・.parent.gameObject.transform?

Transform parentObject = gameObject.transform.parent.gameObject.transform;

じゃなくて、

Transform parentObject = gameObject.transform.parent;

で、これでもう。Transform だった。

以上。永遠に繰り返す、という話。でしたgameObject.transform.gameObject.transform.gameObject.transform.gameObject・・・・。

なんか普通に。よけいに書いちゃったりするー。

ちなみに

//作成したgameObject のtransform.parentに
//親にするオブジェクトの transformをセットすると、
//Instantiateしてからの親子階層がつくれるんだって。
GameObject gObj = (GameObject)Instantiate(プレハブ);
gObj.transform.parent = 親.transform;

いつか使いそう。φ(・・。)♪

Unity 4.3で 2Dゲーム[C#] パズドラ風パズル

いつのまにかUnity 4.3がリリースされていたみたいです。
2Dゲームが作りやすくなったみたい。

というわけで、

パズドラのパズル部分っぽいパズルゲーム(マッチ3ゲーム、スリーマッチ)を作ってUnity 4.3の 2D機能を使ってみよう。できるといいな。

f:id:unity3d:20131201153450p:plain

プロジェクトを作る

新規作成します。
2Dが選択できる
f:id:unity3d:20131201155454p:plain

Sceneビューにも右上に2DのボタンがあるのでONにしてみた。
f:id:unity3d:20131201155823p:plain

ブロックを表示する

テクスチャにする画像をAssetフォルダに保存して、Hierarchyにドラッグ&ドロップ
すると、Sprite Rendererというコンポーネントを持って
いい感じに配置されています。スプライトってなに?
f:id:unity3d:20131201161154p:plain

そのスプライトをHierarchyからProjectにドラッグ&ドロップ
すると、prefabになりました。
f:id:unity3d:20131201162256p:plain
ブロックの種類ごとにそれぞれprefabつくります。
prefabができたら、Hierarchyにあるものは全部削除して、スクリプトで配置する

public static int numColors = 6,
	w = 7,
	h = 7,
	gridLength = w * h;
public Transform[] prefab = new Transform[numColors];
void Start ()
{
	for (int i = 0; i < gridLength; i++) {
		int var = Random.Range (0, numColors);
		Vector3 pos = new Vector3 (i/h - w/2, i%h - h/2, 0);
		Transform tOb = (Transform)Instantiate (prefab [var], transform.position + pos, transform.rotation);
	}
}

InspectorでTransform[] prefab にプレハブをいれておけば、ブロックが出来る。はず。
最初から3つ以上そろってるのは、こことかを参考に無くしていく。
そして。

ブロックの移動

右には、動くようになった。
上下左は動かないけど。
つづく。

クリスマスー。
素材おかりしました。リンクウェアだからりんくです。

今日は。

とりあえず、ブロックの配置ができた!
スプライトってなんだろう。
こんな感じの使い方でいいのかは分からないです。

なんか突っ込みどころとか、おかしい箇所あれば、教えてもらえれば嬉しいです。
ちゃんと完成するといいな。