Unity2Dでアプリを作成中です。
uguiを使用してUIを作成しており
PanelをドラッグすることでPanelの高さを増減させたいのですが
思うように動作せず困っております。
IDragHandlerのOnDragで、RectTransform.sizeDelta.yを移動量分増減させています。
数値上は移動量と同じ分の高さは変化していますが
実際の見た目はドラッグした半分程度しか高さが変化しません。
恐らくCanvas ScalerをScale With Screen Sizeにしているためだと思いますが
どのように実装したらよいでしょうか。
■ヒエラルキー上のオブジェクト
Main Camera Canvas └Panel←これをドラッグで高さを変更したい EventSystem
■Panelにアタッチしたスクリプト
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class DragTest : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { private RectTransform rect; // Start is called before the first frame update void Start() { rect = this.transform.GetComponent<RectTransform>(); } // Update is called once per frame void Update() { } public void OnBeginDrag(PointerEventData eventData) { Debug.Log("OnBeginDrag:" + eventData.delta + "transform size" + rect.sizeDelta); rect.sizeDelta = new Vector2(rect.sizeDelta.x, rect.sizeDelta.y + eventData.delta.y); } // ドラック中に呼ばれる. public void OnDrag(PointerEventData eventData) { Debug.Log("OnDrag:" + eventData.delta + "transform size" + rect.sizeDelta); rect.sizeDelta = new Vector2(rect.sizeDelta.x, rect.sizeDelta.y + eventData.delta.y); } // ドラックが終了したとき呼ばれる. public void OnEndDrag(PointerEventData eventData) { Debug.Log("OnEndDrag:" + eventData.delta + "transform size" + rect.sizeDelta); rect.sizeDelta = new Vector2(rect.sizeDelta.x, rect.sizeDelta.y + eventData.delta.y); } }
■Canvasの設定
Screen Space - Overlay
■Canvas Scalerの設定
UI Scale Mode:Scale With Screen Size Reference Resolution: X 1080 Y:1920 Screen Math Mode: Mach Width Or Height : 0.5 Reference Pixels Per Unit:100
■実際の動作をキャプチャしました。
UI Scale Mode:Constant Pixel Size
にすると思った通りマウスの移動分サイズが変更しますが、
Scale With Screen Sizeで実装したいです。
どこかしらで拡縮率を取得してそれをかけあわせれば実装できそうなのですが・・・。
1.Scale(RectTransformをインスペクタで見た時一番下にあるやつ)は(1,1,1)になっていますか?
2.Pivotの設定は問題無いですか? 例えばPivot0.5(中心が原点)で高さを変えると、上辺も下辺も伸縮するので(どっちかの辺が別オブジェクトで隠れている等の場合)半分しか変わっていないように見えるかも。
3.Canvas Scalerの設定を変えてみるとどうなりますか?
1:(1,1,1)になっています。
2:Pivotを0にしてるので半分しか変わっていないように見える、ということではないようです。
3:Canvas ScalerのUI Scale Modeを「Scale With Screen Size」から「Constant Pixel Size」にすると思った通りの動作になりますが、「Scale With Screen Size」で同様の動作をさせたいです。
回答1件
あなたの回答
tips
プレビュー