前提・実現したいこと
スクリプトでUIのサイズを動的に変更出来るようにしようとしています。
一回目は見た目通りの位置に判定があり、ドラッグすることでUIのサイズを変更できます。
しかし、サイズ変更後は見た目通りの位置に判定が無く、ずれた場所に判定があります。
サイズ変更後になぜズレた位置に判定があるのか分からず困っています。
該当のソースコード
サイズ変更のスクリプト
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.EventSystems; 6 7 8public class Change_WindowSize : MonoBehaviour, IDragHandler,IPointerDownHandler 9{ 10 private Texture2D[] CursorImage; 11 private PointerEventData pointer; 12 private GameObject Window; 13 14 private Vector2 MouseDownPos; 15 private Vector2 MouseDragPos; 16 private Vector2 MoveVector; 17 private string clickAreaName; 18 19 void Start() 20 { 21 Window = gameObject; 22 pointer = new PointerEventData(EventSystem.current); 23 } 24 25 void CheckArea() 26 { 27 List<RaycastResult> results = new List<RaycastResult>(); 28 29 pointer.position = Input.mousePosition; 30 EventSystem.current.RaycastAll(pointer, results); 31 32 foreach (RaycastResult target in results) 33 { 34 Debug.Log("UP" +target.gameObject.name); 35 } 36 37 if(results.Count > 0) 38 { 39 clickAreaName = results?[0].gameObject.tag; 40 } 41 else 42 { 43 clickAreaName = ""; 44 } 45 } 46 47 void ChangeWindowSize(string clickAreaTag, RectTransform windowRect) 48 { 49 var resizeRect = windowRect; 50 51 switch(clickAreaTag) 52 { 53 case "upper": 54 Cursor.SetCursor(CursorImage[0], Vector2.zero, CursorMode.Auto); 55 resizeRect.SetTop(MoveVector.y); 56 break; 57 58 case "under": 59 Cursor.SetCursor(CursorImage[0], Vector2.zero, CursorMode.Auto); 60 resizeRect.SetBottom(MoveVector.y); 61 break; 62 63 case "left": 64 Cursor.SetCursor(CursorImage[1], Vector2.zero, CursorMode.Auto); 65 resizeRect.SetLeft(MoveVector.x); 66 break; 67 68 case "right": 69 Cursor.SetCursor(CursorImage[1], Vector2.zero, CursorMode.Auto); 70 resizeRect.SetRight(MoveVector.x); 71 break; 72 } 73 74 windowRect = resizeRect; 75 } 76 public void OnPointerDown(PointerEventData e) 77 { 78 MouseDownPos = Input.mousePosition; 79 CheckArea(); 80 } 81 82 public virtual void OnDrag(PointerEventData e) 83 { 84 MouseDragPos = Input.mousePosition; 85 var WindowRt = Window.GetComponent<RectTransform>(); 86 87 var c1 = WindowRt.TransformPoint(new Vector2(WindowRt.rect.x, WindowRt.rect.y)); 88 var c2 = WindowRt.TransformPoint(new Vector2(WindowRt.rect.xMax, WindowRt.rect.yMax)); 89 90 MoveVector = MouseDragPos - MouseDownPos; 91 MouseDownPos = Input.mousePosition; 92 93 ChangeWindowSize(clickAreaName,WindowRt); 94 } 95}
Set○○(float)の中身
C#
1 using UnityEngine; 2 public static class RectTransformExtensions 3 { 4 public static void SetLeft(this RectTransform rt, float left) 5 { 6 Vector2 rect = rt.offsetMin; 7 rect.x += left; 8 rt.offsetMin = rect; 9 } 10 11 public static void SetRight(this RectTransform rt, float right) 12 { 13 Vector2 rect = rt.offsetMax; 14 rect.x += right; 15 rt.offsetMax = rect; 16 } 17 18 public static void SetTop(this RectTransform rt, float top) 19 { 20 Vector2 rect = rt.offsetMax; 21 rect.y += top; 22 rt.offsetMax = rect; 23 } 24 25 public static void SetBottom(this RectTransform rt, float bottom) 26 { 27 Vector2 rect = rt.offsetMin; 28 rect.y += bottom; 29 rt.offsetMin = rect; 30 } 31 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。