*

[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

関連記事

visualstudio_

[visual studio]ODBC等のConnection Stringの簡単な作り方

Connection Stringって大体いつも検索して、それを使ってみて、だめだったりOKだったり

記事を読む

Unity_

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

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

記事を読む

VisualStudio_

[C#,Excel]visual studio tools for office(VSTO)を利用してExcelのAddInをC#で作る

いい加減VBAが嫌になってきたので、調べたらC#でExcelのアドインが作れるんですね。 というわ

記事を読む

logo

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

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

記事を読む

logo

[C#]BinaryFormatterなどSerializerいろいろ書いておく

github始めました -> わなびのgithub それは置いておいて、BinaryForma

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 同じ色で繋がったパズルを消去する ソース解説

◆全文 using UnityEngine; using System.Collecti

記事を読む

Unity_

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

◆全文 using UnityEngine; using System.Collection

記事を読む

logo

[C#, Linq]foreach構文は書けるけど、Linqはよくわからなくて勉強する気がなくなった貴方に

Linq普及委員会エントリです。 いまさらすぎるわ! とか言わないで。 小難しい話はなしに、

記事を読む

logo

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

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

記事を読む

Unity_

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

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

記事を読む

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 ↑