미리보기아래와 같은 효과를 구현했다코드using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;// 스크롤 했을 때 element가 뷰포트 중앙에서 멀어질수록 스케일이 작아지는 효과 클래스public class ScrollRectElementScaleEffect : MonoBehaviour{ [SerializeField] private ScrollRect myScrollRect; public float distanceFactor = 0.01f; private void Start() { OnValueChanged(Vector2.zero); } ..
이 글 부터는 다시 독백체로 돌아갑니다가독성이 그게 더 좋은거 같네요 아래와 같은 Grid Layout Group이 있다앵커를 수평 Stretch로 맞췄고,현재 화면 비율에서 좌우 여백을 맞췄다 그리고 화면비율을 바꿔보면 아래 그림처럼 여백이 안맞게된다모든 화면비율에서 균등한 좌우 여백을 위해 동적으로 계산해서 적용해줘야 한다 코드를 작성했다당장 범용성보다는 이 케이스를 빨리 해결하기위해 작성한거라그리드의 Start Corner가 왼쪽 위(Upper Left)인 경우만 고려해서 작성했고,상하 여백은 고려하지 않았다 추가로, 테스트를 위해 오딘 익스펙터 에셋의 `[Button]`속성을 사용했다using System.Collections;using System.Collections.Generic;using..
개요 -이 작업을 하게된 계기 효과음 사운드 적용 작업을 시작하게 됐는데 생각해보니 UI버튼에 사운드가 들어갈 대비를 미리 안했었다. 그래서 그 많은 UI에 일일히 사운드를 연결해줘야하나 고민하다가 Button 클래스를 상속받아 새로운 버튼 클래스를 만들어서 확장성을 넓히기로 결정했다. 본문 1. 일단 상속을 받아보자 ! 먼저 Button 클래스를 냅다 상속받고 변수를 하나 추가한 뒤에 인스펙터를 확인해보자. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using UnityEditor; using UnityEdit..
개요 GoF 디자인 패턴중 생성 패턴에 해당하는 Builder패턴을 이용하여 팝업UI 시스템을 구현한 것을 기록한다. GoF디자인 패턴은 아래 블로그에 자세하게 설명해주셨다. [Design Pattern] GoF(Gang of Four) 디자인 패턴 - HERSTORY 디자인 패턴이란 디자인 패턴은 모듈의 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할때 참조할 수 있는 전형적인 해결 방식을 말한다. 디자인 패턴을 통해 설계 문제, 해결 방 4z7l.github.io Builder패턴은 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는 방법이다. 만들어야할 객체가 다른옵션 한두개만 가지고있다면 생성자 혹은 따로 Init()함수를 만들어서 파라미터로 옵션을 넘겨줘도 될것이다. 하지만, 옵..
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class UnitContent : MonoBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler { // 부모 그리드 레이아웃 그룹 [SerializeField]private GridLayoutGroup parentGroup; // 드래그 제한 범위 [SerializeField] private RectTransform dragArea; private PointerEventData currentEventDa..
private bool IsPointerOverUI() { PointerEventData pointerEventData = new PointerEventData(EventSystem.current); pointerEventData.position = Input.mousePosition; ListRaycastResult> results = new ListRaycastResult>(); EventSystem.current.RaycastAll(pointerEventData, results); for (int i = 0; i results.Count; i++) { if (results[i].gameObject.l..