분류 전체보기 147

Section 1. 유니티 기초 - 매니저 만들기, 싱글톤 패턴

* C# Script 생성 시에는 컴포넌트 용도로 쓸 파일과 일반적인 스크립트 파일을 구분할 것 static Managers s_instance; public static Managers Instance { get { Init(); return s_instance; } } void Start() { Init(); } static void Init() { if (s_instance == null) { GameObject go = GameObject.Find("@Managers"); if (go == null) { go = new GameObject { name = "@Managers" }; go.AddComponent(); } DontDestoryOnLoad(go); s_instance = go.GetCo..

[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 부분에 스크립트를 담았던 오브젝트를 드래그한 다음, 해당 버튼을 클릭할 경우 실행시킬 함수를 지정한다 (스크립트를 드래그하는 것이 아니라 오브젝트를 드래그! 해당 오브젝트 내에 있는 스크립트를 선택)