イメージと実際のものは違ったりする

勝手に、こうすればすぐできるだろうと思うこむことがよくあって、変に詰まることがよくある。本当によくある。

この思い込みでものすごい時間をかけたりする。

今日は「ドラッグ&ドロップ」をやってみようと思いました。

簡単なパズルゲーム(またもや算数系アプリで)を作ってみようと思っているのですが、ドラッグ&ドロップを使うかは、まだ未定。だったのですが。

ドラッグの動きを見て「これじゃない」と思ったので、ドロップまで行かなかった。使わないと思った瞬間からやりたくなくなったから。

とりあえず、やって見たところまでは記事にします。

ちなみに、ゲームそのものは、純粋にクリックするだけの動きにしようとも思っています。

参考にしたサイト。
・記事名:uGUIでドラッグについてちょっとだけ詳しく
・サイトリンク:http://qiita.com/okuhiiro/items/4c313038798da6923205

オブジェクトをドラッグしてみよう

まずはuGUI配置と簡単な実装

配置したuGUIの「Text」さんは、下の四つのボタンを押すと、押したボタンの数字に変化するようにしました。

で、私がこの「ドラッグ&ドロップ」でここから何がやりたかったというと、「1」のボタンをドラッグして「2」のボタンにトロップさせると、「3」になるという足し算仕組み。

実装しよう

ソースはこちら。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class DragAndDrop: MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	// ドラック開始時
	public void OnBeginDrag(PointerEventData eventData)
	{
		Debug.Log("drag Start");

	}

	// ドラック中
	public void OnDrag(PointerEventData eventData)
	{
		Debug.Log("dragging");
	}

	// ドラック終了時
	public void OnEndDrag(PointerEventData eventData)
	{
		Debug.Log("dragEnd");
	}
}

drag&dropは「EventSystems」にある機能らしい。なので、使わせての宣言をする。
これを抜かして怒られました。

using UnityEngine.EventSystems;

ドラッグ開始時は「OnBeginDrag」というメソッドで、ドラッグ中は「OnDrag」、ドラッグ完了後(離した後?)「OnEndDrag」でそれぞれ行われます。これを実際に動かしてみると、以下の通り。

「1」にこのスクリプトをアタッチしています。ただ、オブジェクトが動く処理は入れていないので・・・。
Debugは吐き出しているけど、動いているのかいまいちわからない状態に。

オブジェクトを動かす

「1」を動かすよう、「OnDrag」処理に位置情報を追加してやります。

	// ドラック中
	public void OnDrag(PointerEventData eventData)
	{
		Debug.Log("dragging");
		Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10);
		this.transform.position = Camera.main.ScreenToWorldPoint(mousePosition);
	}

スクリプトが付いているオブジェクトさんをマウスポジションに動かしてあげます。

どこ?!

ドラッグっぽい動きを0.1秒くらいして消えました。左下にいます。「1」さん。

数字すら見えない状態。ということは、もしかして位置情報が、uGUIさんたちと、マウスさんで噛み合っていないということかしら。

ということで、調べると、おそらくこれでしょう。

今回もお世話になります、椿さんのテラシュールブログ。

World SpaceをScreenSpace-Cameraへ変更

Canvasの「Render Mode」wp「ScreenSpace-Camera」へ変更。

「Render Camera」カメラは、一つあるMain Cameraを追加してあげます。そうするとほら。治った。

やってみるとわかる

やはり、簡単なテストプロジェクトを開いて作って見てからやればどんな感じなのかわかりますね。

ドラッグ&ドロップ処理をしようとして、ドラッグの時点でこれじゃないと思ったので、ドロップ処理は、無視。

こんなに滑らかに動いてほしい訳でもなく、自由に色々動いて欲しい訳でもなく、範囲を決めて動かせればいいじゃんという感じの動きでもない。もっと硬い感じで動いて欲しかった。

結局使わなかったけれど、おそらくこれが一番参考になるのではと思った記事。

・記事名:uGUIでドラッグドロップ
・サイトリンク:http://qiita.com/ayumegu/items/c07594f408363f73008c

Unity ドラッグを試す その2