*

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

公開日: : 最終更新日:2014/11/30 C#, Unity, ソース

前回の続きです。

というわけで移動の仕方は完璧です。本当なら一瞬で移動ではなく、パズドラみたく、ぬるっと動かしたいところですが、
とりあえず遊べるところまで作ってから対応しましょう。

今度はパズル部分のロジックを作成します。

移動が出来たら今度はパズルを消すロジックが必要です。
パズルを消すためには、パズルの情報を集める必要があります。
パズルの情報を集めるためには、まずは扱いやすくするために、タグを付けます。
集めたい情報である、タイルたちに共通のタグをつけるんですね。
(名前がtile_0で一緒ですが)

まずはなんでもよいのでInspectorで上部のTagのドロップダウンを開き、「Add Tag」を選択します。
Unity_

出てきたTag & LayersElement0tileと入力します。
Unity_

そしてtile_0を全部選んで、
Unity_

InspectorのAdd Tagからtileを選びましょう。
Unity_

これでスクリプトで扱いやすくなりました。
そんなわけでGameSystemで早速使ってみましょう。

using UnityEngine;
using UnityEngine;
using System.Collections;

public class GameSystem : MonoBehaviour {
	public GameObject holdObj;
	public float holdPositionX;
	public float holdPositionY;
	private float z = 10f;
	private GameObject[] tileSet;
	
	// Use this for initialization
	void Start () {
		SetTileSet();
	}
	
	// Update is called once per frame
	void Update () {
		if(Input.GetMouseButtonDown(0)){
			LeftClick();
		}
		if(Input.GetMouseButton(0)){
			LeftDrag();
		}
		if(Input.GetMouseButtonUp(0)){
			LeftUp();
		}
	}
	
	private void LeftClick(){
		Vector3 tapPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, z);
		if(holdObj == null){
			Collider2D col = Physics2D.OverlapPoint(Camera.main.ScreenToWorldPoint(tapPoint));
			if(col != null){
				this.holdObj = col.gameObject;
				holdPositionX = this.holdObj.transform.position.x;
				holdPositionY = this.holdObj.transform.position.y;
				holdObj.transform.position = Camera.main.ScreenToWorldPoint(tapPoint);
			}
		}
		
	}
	private void LeftDrag(){
		Vector3 tapPoint = Input.mousePosition;
		if(holdObj != null){
			this.holdObj.transform.position = Camera.main.ScreenToWorldPoint(new Vector3(tapPoint.x, tapPoint.y, z));
			Collider2D[] colSet = Physics2D.OverlapPointAll(Camera.main.ScreenToWorldPoint(new Vector3(tapPoint.x, tapPoint.y, z)));
			if(colSet.Length > 1){
				foreach(Collider2D col in colSet){
					if(!col.gameObject.Equals(this.holdObj)){
						float tmpPositionX = holdPositionX;
						float tmpPositionY = holdPositionY;
						holdPositionX = col.gameObject.transform.position.x;
						holdPositionY = col.gameObject.transform.position.y;
						col.gameObject.transform.position = new Vector3(tmpPositionX, tmpPositionY, z);
					}
				}
			}
		}
	}
	private void LeftUp(){
		Vector3 tapPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, z);
		if(holdObj != null){
			holdObj.transform.position = new Vector3(holdPositionX, holdPositionY, z);
			holdObj = null;
		}
	}

	private void SetTileSet(){
		tileSet = GameObject.FindGameObjectsWithTag("tile");
	}
}

追加されたのは以下の三種類だけです。

private GameObject[] tileSet;

画面上のタイルの情報をフィールドで保持しています。

void Start () {
	SetTileSet();
}

初期処理で一回画面上のタイルを登録するメソッドを呼んでます。

private void SetTileSet(){
	tileSet = GameObject.FindGameObjectsWithTag("tile");
}

大事なのはここです。GameObject.FindGameObjectsWithTag()で画面上の指定したタグのGameObjectを得ることが出来ます。
今回でいえばtileを設定したものだけ得ることが出来ました。
タグでtileを設定したものは複数ありますのでこちらは配列になります。

というわけで準備一つ目が終わりました。
ちなみに実行してみても画面上に変化は特にないと思います。
次回はそれぞれのGameObjectにIDをつけるような作業の予定です。

次回更新しました→[Unity]Unity2Dチュートリアル 画面上のGameObjectを左下から取得する

↓どうしても待ちきれない人へお勧めの書籍↓

読んでみたけど、なかなか手軽な内容です。初心者に丁度よい情報量だと思います。初心者を抜け出した頃だと少し物足りないかも? Scriptについても超基本までは解説してあるのでこれを覚えてアルゴリズムを考えて覚えていきました。

ad

関連記事

unity

[Unity]コードリファレンス GameObjectの検索と削除

検索ですので、検索対象となるCubeでも適当に置いておきます。 GameObject.

記事を読む

logo

プログラミング言語の選択

最初のプログラミング言語っていうのは思い入れが深いもんです。 私はこんな感じ。 C言語 ↓ jav

記事を読む

socket p2p unity

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

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

記事を読む

unity socket

[Unity]Socket通信でP2Pすっぞ 接続待ち受け

P2Pしましょ。 まずはサーバーとして待ちうけまで作ります。 UnityだとNAT越えどうす

記事を読む

Excel Csharp

[C#]DataGridViewにプロパティを利用しながら配列をバインドする。

DataGridView C#のFormにデータを表示するのに便利なコントロールがあります。 デ

記事を読む

Unity_

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

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

記事を読む

Unity_

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

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

記事を読む

logo

[C#]システム関連付けのソフトでファイルを起動する

事の発端 PDFをAdobeReaderで開きたいといわれました。 コマンドラインでAdobeR

記事を読む

unity moving

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

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

記事を読む

unity rotate worldpoint

[Unity]コードリファレンス GameObjectを回転する。

くるくる回します。 rotationプロパティ Objectの向きをワールド座標で指定します

記事を読む

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 ↑