07 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 09

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【Unity】まだ口痛いっす。とりあえずuGUIでドラッグアンドドロップのやり方 その1 

こんにちは!
親知らず抜いて、そろそろ1週間が経ちそうですが、いまだに縫った頬の内側が痛くて腫れてます・・・
歯抜いたところは大丈夫そうなんですけどね・・・・
まぁあと1週間もすれば痛みなくなるでしょう・・・

さて、Unityの話ですが・・・先週まともにUnity触ってないんす・・・

まぁ軽く。

uGUIにて、ドラッグアンドドロップを使う方法。
このネタ自体は他のブログさんを参照にさせて頂きました。

ただ、うまくいかなかったため、俺が勝手にいじった感じです。
まず第1回目はドラッグする側のオブジェクトについて。

こんな感じで画面を作ります。

上にある白い四角2つが、それぞれCanvas直下のdrop1とdrop2になります。
動かす方は、DragObjの下にあるdrag1~drag4になります。

まずは以下のコードを作成。

DragObject.cs
using UnityEngine;
using UnityEngine.EventSystems;

public class DragObject : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler {
public static DragObject dragObject;
public Vector3 initPosition;
public Transform parentTransform;
private CanvasGroup canvasGroup;
private Transform canvasTransform;

public CanvasGroup CanvasGroup { get { return canvasGroup ?? (canvasGroup = gameObject.AddComponent()); } }
public Transform CanvasTransform { get { return canvasTransform ?? (canvasTransform = GameObject.Find("DragObj").transform); } }

public int charaNo;

void Awake() {
initPosition = transform.localPosition;
}

public void OnBeginDrag(PointerEventData eventData) {
dragObject = this;
transform.SetParent(CanvasTransform);
CanvasGroup.blocksRaycasts = false;
CanvasGroup.alpha = 0.5f;
}

public void OnDrag(PointerEventData eventData) {
Vector3 posi = Input.mousePosition;
posi = new Vector3(posi.x - 240f,posi.y - 427f,0f);
transform.localPosition = posi;
}

public void OnEndDrag(PointerEventData eventData) {
if (transform.parent == canvasTransform) {
transform.SetParent(parentTransform);
}
dragObject = null;
CanvasGroup.blocksRaycasts = true;
CanvasGroup.alpha = 1.0f;
}

public void Update() {
if (dragObject == null) {
transform.localPosition = initPosition;
}
}
}


OnDragメソッドのポジションについては、画面のサイズ/2で計算してます。
今回は 横480x縦854で指定しているので、Vector3はnew Vector3(posi.x - 240f,posi.y - 427f,0f);となっています。

このコンポーネントを、各drag1~drag4につけます。
各オブジェクトの「public Transform parentTransform;」
には、DragObjをアサインします。

これでドラッグでオブジェクトが動くようになりました!いぇい!
※動きはクリックしてみてね!




とりあえず今日はこんな感じ!
次回はドロップ部分について書いていきたいと思います。

あでゅ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/379-cecc90b4
この記事にトラックバックする(FC2ブログユーザー)