2024/01 29

[Unity] SerializeField/public 선언해둔 변수 인스펙터 창 초기화

SerializeField로 선언해 둔 Theme에 코드 상에서 새로운 Element를 추가해도 제대로 반영이 되질 않았음... 인스펙터 창에서 한 번 값을 변경하면 코드에서 수정해도 반영이 안 된다고 한다 간단하게는 그냥 스크립트에 우클릭 > Reset 해주면 적용이 된다 Game Manager의 경우 프리팹으로 만들어뒀기 때문에 프리팹에 들어가서 초기화시켜주면 된다

[Unity] UI 클릭 제외하기

if (Input.GetTouch(0).phase == TouchPhase.Began) { if (EventSystem.current.IsPointerOverGameObject(0) { return; } SceneManager.LoadScene("Game"); } 첫번째 터치가 eventsystem 위(UI 위)에 있으면 return 함으로써 UI 터치 시 Game이 시작되지 않도록 할 수 있다 IsPointerOverGameObject는 int 파라미터가 필요한데, PC나 유니티 상에서의 터치는 -1, 휴대폰 상에서의 터치는 0으로 처리한다

[Unity] 스크롤뷰 만들기

Hierarchy 뷰에서 우클릭 UI > Scroll View로 스크롤뷰 오브젝트를 생성해준다 이번엔 스크롤바를 쓰진 않을 것이기 때문에 함께 생성되는 스크롤바 2종류는 그냥 삭제해도 무방하다 Scroll View의 Scroll Rect 컴포넌트에서 몇 가지 조절을 해준다 Horizontal / Vertical 체크박스: 가로 / 세로 스크롤이 가능하게 할 것인지 여부 Movement Type - Unrestricted: 범위를 벗어나면 벗어나는 대로 스크롤된 상태를 그냥 유지함 - Elastic: 범위를 벗어나면 다시 범위 내로 돌아감(탄성 有, Elasticity는 이 탄성력을 조절하는 변수) - Clamped: 범위를 벗어나지 못하게 스크롤이 막힘 그리고 Content 오브젝트에 정렬 컴포넌트가 필..

[Unity] UI 요소 제외하고 클릭 이벤트 감지하기

https://docs.unity3d.com/kr/530/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html EventSystems.EventSystem-IsPointerOverGameObject - Unity 스크립팅 API Is the pointer with the given ID over an EventSystem object? docs.unity3d.com 유니티 공식 문서 if(Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject()) { SceneManager.LoadScene("Game"); } * GetMouseButtonDown은 터치..

[Coding] 싱글톤 패턴 구현 방법(2가지)

int instanceCount = FindObjectsOfType(GetType()).Length; if (instanceCount > 1) { gameObject.SetActive(false); Destroy(gameObject); } else { DontDestroyOnLoad(gameObject); } 1. 해당하는 오브젝트들의 길이를 재서 판단하는 방법 static AudioPlayer instance; if (instance != null) { gameObject.SetActive(false); Destroy(gameObject); } else { instance = this; DontDestroyOnLoad(gameObject); } 2. static 변수를 통한 싱글톤 패턴 구현 stati..

[Unity] 버튼 클릭해서 씬(Scene) 전환하기

1. File - Build Setting으로 들어가서 생성한 Scene들을 드래그 해주고 창을 닫는다 public void LoadGame() { SceneManager.LoadScene("Game"); } 2. 스크립트 상에서는 위와 같이 함수를 작성해주면 된다 씬의 이름을 명시적으로 작성해줘도 되고, build index 번호를 넣어줘도 된다 3. 버튼의 on click 부분에 스크립트를 담았던 오브젝트를 드래그한 다음, 해당 버튼을 클릭할 경우 실행시킬 함수를 지정한다 (스크립트를 드래그하는 것이 아니라 오브젝트를 드래그! 해당 오브젝트 내에 있는 스크립트를 선택)

[Unity] 화면 밖으로 오브젝트 이동 불가하게 만들기

그냥 단순히 input을 입력받아 이동시켜주다 보면 카메라 밖으로 벗어나게 되는 경우가 생기는데, 이를 방지하기 위한 방법 Vector2 minBounds; Vector2 maxBounds; void InitBounds() { Camera mainCamera = Camera.main; minBounds = mainCamera.ViewportToWorldPoint(new Vector2(0, 0)); maxBounds = mainCamera.ViewportToWorldPoint(new Vector2(1, 1)); } Vector2 형태의 minBounds와 maxBounds를 정의해 준 다음 InitBounds 함수에서 이를 초기화해준다 (Start 함수에서 실행) main 카메라가 비추고 있는 곳의 좌측 ..