Unity メモ – Androidでゲームオブジェクトをタッチする処理

Posted: 2012年5月29日 カテゴリー: プログラミングメモ, Unity, Unity メモ
タグ:, , , , , , , ,

Unityでは、AndroidとiPhone用の入力処理用の機能がありますが、触った箇所にあるゲームオブジェクトに処理を加える機能は自分で実装する必要があります。

 

今回は、Androidの実機でゲームオブジェクトをタッチした時、オブジェクトのOnMouseDown()メソッドを呼ぶ処理をメモります。OnMouseDown()を呼ぶのは、PCと同じ処理を使えるようにするためです。

 

では、さっそく実装に入ります。まず、スクリプトファイルを作成し、入力確認用のメソッドを実装します。ちなみに今回は、タッチだけを処理します。

 

public class TouchChecker : MonoBehaviour
{	
	protected virtual void CheckTouch()
	{
		if ( Input.touchCount <= 0 )
		{
			return;	
		}

 

最初のif分は、Androidを使用していない時や、入力が無い時の為のエラーチェックです。タッチの入力が一つも無い時は、入力確認の処理を飛ばします。

 

次に、タッチの入力があるかを確認します。

 

		Touch touch = Input.GetTouch(0);
		if ( touch.phase == TouchPhase.Began ) 
		{
 

 

今回は、タッチは一つだけ、それに画面に触ったフレームだけを確認に使用します。

 

次に、実際にオブジェクトを触ったかの確認する処理を実装します。今回、ゲームオブジェクトにタッチしているかを確認するのには、触った画面の位置からレイ(光線)を飛ばし、その光線に当たったオブジェクトのOnMouseDown()メソッドを呼び出します。

 

では、実際に実装します。まず、画面の触った位置を獲得し、その位置情報を使ってカメラから飛ばす光線を作ります。

 

                        Vector2 point = touch.position;
			RaycastHit hit = new RaycastHit();
			Ray ray = Camera.main.ScreenPointToRay( point );
			
			if ( Camera.main == null )
			{
				ray = Camera.current.ScreenPointToRay( point );
			}

 

最後のif文は、もしMainCameraが設定されていなかったり、存在しなかった時に、代わりに現在使用しているカメラを使う処理です(何かこれだけでも動く気もしますが、念の為です)。

 

次に実際に光線を飛ばします。光線は、UnityのPhysicsにある機能を使用し、それで当たったオブジェクトを獲得した後、そのオブジェクトのOnMouseDown()を呼んでいます。

 

			if ( Physics.Raycast( ray, out hit ) ) 
			{
				hit.transform.gameObject.SendMessage( "OnMouseDown" );
			}
   		}
	}

 

最後に、今実装したメソッドをUpdate()メソッド内で毎フレーム呼びます。

 

void Update () 
{
        CheckTouch();
}

 

後はこのスクリプトを適当なゲームオブジェクトに追加し、触った時に何らかの処理を実行したいゲームオブジェクトには、OnMouseDown()内で処理を追加してください。

 

今回はココまでです。
そういえば何時の間にか1万ヒット超えてました。ワーイ!
誰が見るかも解らないブログにココまでアクセスが来るとは・・・(と言ってもまだまだしょぼい数ですが)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中