GUI」タグアーカイブ

UnityのUIをスクリプトから操作する方法

UnityのUI(Pos X/Pos Y/Pos ZやWidth/Height)はRectTransformlocalPositionizeDeltaを使って操作できるようです。

Pos X/Pos Y/Pos Z

// Pos X
GetComponent<RectTransform> ().localPosition.x;

// Pos Y
GetComponent<RectTransform> ().localPosition.y;

// Pos Z
GetComponent<RectTransform> ().localPosition.z;

Width/Height

// Width
GetComponent<RectTransform> ().sizeDelta.x

// Height
GetComponent<RectTransform> ().sizeDelta.y

ただ、そのまま使うとInspectorで表示される値とスクリプトで取得できる値が異なることもあり、取り扱いには注意が必要そうです。親Rect TransformやAnchors等の値が関係しているみたいです。

リンク

Unityの新しいGUI機能(uGUI)で実装されたRect Transformの仕様メモ – お米 is ライス
http://spi8823.hatenablog.com/entry/2014/10/27/024948

UnityのUIでDrag and Drop

IBeginDragHandler, IDragHandler, IDropHandlerを継承するとOnBeginDrag, OnDrag, OnDropが使えようになるそうです。

public class Example : MonoBehaviour, IBeginDragHandler, IDragHandler, IDropHandler
{
  public void OnBeginDrag(PointerEventData eventData)
  {
    Debug.Log("OnBeginDrag");
  }

  public void OnDrag(PointerEventData eventData)
  {
    Debug.Log("OnDrag");
  }

  public void OnDrop(PointerEventData eventData)
  {
    Debug.Log("OnDrop");
  }
}

Drag & Dropに限らず、UnityでUIを使うときはEventSystemも必要になるので気を付けてください。

リンク

uGuiでDrag And Drop処理 – Qiita
https://qiita.com/divideby_zero/items/d8eebc44e151a60b2b81

unity4.6 beta / uGUI ドラッグ編 – petlust
http://petlust.hateblo.jp/entry/2014/08/24/190838

UIとGameObjectが重なっている場合の判定方法

Raycastを使ってGameObjectの選択をしているプログラムで、UIとGameObjectが重なっている場合に使える方法。

using UnityEngine.EventSystems

EventSystem.current.IsPointerOverGameObject()

リンク

How to make UI block raycats (mobile) | Unity Community
http://forum.unity3d.com/threads/how-to-make-ui-block-raycats-mobile.271978/