FC2ブログ
    02 «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.» 04

    ハルシオンシステムの気まま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.jp/tb.php/379-cecc90b4
    この記事にトラックバックする(FC2ブログユーザー)