728x90
SMALL

분류 전체보기 106

ref 와 out

ref와 out은 둘 다 값을 참조 형태로 전달하기 위해 사용되는 키워드지만, 용도와 사용 방식에 차이점이 있다. ref란?ref 키워드는 메서드에 변수를 참조로 전달할 때 사용된다. 이를 통해 메서드 내에서 변수의 값을 변경할 수 있으며, 변경된 값이 반영된다. ref를 사용할 때는 변수가 메서드 호출 전에 초기화되어 있어야 한다. 이처럼 변수를 초기화 안시키고 사용하면 컴파일 중에 오류가 난다. 왜 오류가 날까?ref를 통해 참조된 변수가 메서드 내에서 미리 정의된 값에 의존할 수 있기 때문이다. out이란?out 키워드도 메서드에 변수를 참조로 전달할 때 사용되지만, out을 사용할 때는 변수를 메서드 호출 전에 초기화할 필요가 없다. 대신, 메서드 내에서 반드시 변수를 초기화해야 한다...

C#, 자료구조 2025.04.24

[UI] - 다국어화(Localization)

지난 시간에 직접 스크립트를 만들고 적용시키며 다국어화를 적용 시켰다. 이번에는 유니티에서 제공해 주는 다국어화 시스템을 이용해서 게임에 적용시켜보자.패키지 버전은 Unity 버전 2021.2 이상부터 사용할 수 있다.   1. Package Manager에서 Loclization 패키지 설치    2. Edit -> Project Settings -> Localization -> Active Settings 만들어주기   3. 폴더 저장 후 해당 폴더에서 Locale Generator 클릭 후 사용할 언어 체크 후 폴더에 다시저장    기본 언어는 한국어로 설정하고 영어, 일본어 추가해주기 Command Line Locale Selector(기본 설정값): 커맨드라인에서 언어를 바꿀 때 사용함Syste..

[UI] - 다국어화(Json) - 2

다국어화(Json) - 1 글을 작성할 때 아래와 같은 문제점이 있었다. 이문제들을 해결해 보자.문제점1. GameObject.name을 기준으로 매칭현재 문제점: UI 텍스트 매칭 기준이 textElement.gameObject.name이기 때문에, 오브젝트 이름 변경 시 언어 데이터 매칭 실패.2.  LoadLanguage() 호출 시 파일 I/O 성능 저하현재 문제점: 매번 언어 변경 시마다 JSON 파일을 파일 경로로 직접 읽어오는 방식이라 성능 저하 및 모바일 환경에서 문제 발생 가능. 해결 방법 TextLocalizer라는 스크립트를 하나 만들어서 다국어화가 필요한 Text가 생길 때 마다 오브젝트에 해당 스크립트 붙혀주자.해당 스크립트가 붙은 오브젝트들은 Key 값을 통해 언어가 적용되도록 ..

[UI] - 다국어화(Json) - 1

게임을 출시하면 여러나라 각국에 출시하게 될 것이다. 그 나라에서 플레이 하려면 그 나라에 맞는 언어를 제공해주어야 할 것이다. 언어를 변경했을 때 각 나라에 맞는 언어를 보여줄 수 있도록 다국어화를 해보자.  구글 스프레드 시트에서 각 나라에 언어를 저장한 후 Json데이터로 변환해서 언어를 변경했을 때 해당 데이터를 받아와서 사용하자.  동작 흐름 OptionPopup에서 드롭다운 선택으로 언어 변경.OnLanguageChange()에서 언어 인덱스를 PlayerPrefs에 저장.LanguageManager.LoadLanguage()를 호출하여 JSON 데이터 로딩.currentLanguageData 딕셔너리 생성 및 UI 텍스트 업데이트.  1. 옵션팝업 생성  2. OptionPopup.Cs 생성..

[Unity] - Text Mesh Pro (다국어화)

지난 시간에 TMP Text 를 사용할 때 폰트를 다운받아서 사용했다. 그런데 일본어와 다른 언어에서는 해당 폰트를 사용했을 때 글자가 깨지고 있다.  아래는 일본어를 적용했을 때 모습   해결 방법 Unity에서 다국어 지원을 위해 일본어를 추가하려면 일반적으로 일본어를 지원하는 폰트를 사용해야 한다. 현재 메인 폰트로 MapleStroy Font를 사용하고 있다면, 이 폰트가 일본어 문자를 지원하지 않을 가능성이 높다. 따라서 일본어를 표시하기 위해 Noto Sans JP와 같은 일본어를 지원하는 폰트를 추가하는 것이 좋다. 구현 방법 1. Noto Sans JP 폰트 다운로드:Google Fonts 웹사이트에 접속하여 Noto Sans JP 폰트 패밀리를 다운로드2. 유니티 프로젝트에 폰트 임포트:..

Unity 2025.03.25

[UI] - 화면 비율 대응(모바일 환경)

각 모바일 기기마다 화면의 크기는 다 다르다. 또한 아이폰 14Pro 부터는 다이내믹 아일랜드가 생겨서 그 부분도 처리해줘야 한다. 모든 화면에서 UI가 벗어나지 않고 잘 보일 수 있도록 만들어보자.  이런식의 UI가 있다고 가정할 떄    ⚠️ 아래와 같이 다 다른 비율을 가지고 있다. 또한 UI가 밖으로 빠져나가고 있다. ⚠️ 가로형 게임아이폰 12 Pro삼성 제트플립3샤오미 레드미 6 프로  세로형 게임아이폰 12 Pro삼성 제트플립3샤오미 레드미 6 프로  ⚠️ 주의 ⚠️- 패드와 같은 태블릿들은 일반 핸드폰과 해상도가 다르다.- Z플립이나 폴더같은경우 접었다 폈다 하는 경우에 해상도가 바뀐다.- 아이폰 14pro 모델부턴 다이내믹 아일랜드로 인해 그 영역을 침범하면 안된다.  2가지의 스크립트를..

Json이란? - Unity JsonUtility

지난 시간에 Json의 기본정의와 NewTonSoft Json을 통해 데이터를 저장하고 불러오는 과정을 했다. 그런데 NewTonSoft Json은 모노비헤이비어를 상속받는 클래스의 오브젝트를 Json 데이터로 직렬화(시리얼라이즈) 할 수 없다.MonoBehaviour는 Unity 엔진 내부에서 관리하는 특별한 클래스라서 직렬화가 지원되지 않음.Unity의 GameObject, Transform, Component 등도 직렬화 대상이 될 수 없음. 스크립트가 가지고 있는 프로퍼티 중에서 필요한 프로퍼티를 클래스로 묶어서 해당 클래스만 시리얼 라이즈 하거나 Unity JsonUtility를 사용해야 한다.  ✅ Unity JsonUtility유니티 엔진에서 제공하는 가벼운 JSON 변환 기능.MonoBeh..

Unity 2025.03.12

Json이란? - NewTonSoft Json

유니티에서 JSON이란?JSON(JavaScript Object Notation)은 데이터를 쉽게 저장하고 전송할 수 있도록 설계된 경량 데이터 형식이다.쉽게 말하면 서버와 클라이언트 사이에 데이터를 주고받을지에 대한 방법이다.유니티에서는 객체 데이터를 JSON 형식으로 변환하여 파일로 저장하거나, 네트워크 통신 시 데이터를 주고받는 데 사용할 수 있다.JSON은 { "key": value } 형태의 키-값 쌍으로 이루어져 있으며, 리스트나 중첩된 객체 구조도 표현할 수 있다. 비슷한 예XML - Json에 비해 가독성이 떨어지고 데이터를 넣거나 꺼내기 위해 파싱하는 과정이 까다롭다.SCV - 표 형식의 데이터 형식이라 편하지만, 고차원(표안에 표를 넣는 형식)에선 불편하다. JSON의 특징가볍고 직관적..

Unity 2025.03.10

[UI] - 버튼 연속 누르기

클릭 이벤트가 발생할 경우에 그 기능들은 각각 다를것이다. 예를들어 일반적인(한번뿐인) 클릭과 쭉 누르고 있어야 하는 클릭이 있을 것 이다. 이번 장에서는 두가지 경우를 테스트 해보고 만들어보자.  테스트 팝업에서 숫자가 늘어나는 방식으로 확인해보자.  일반적인 클릭Ex) - 팝업 열기, 닫기 1. 팝업 만들기   2. 스크립트 작성     3. 적용   결과 꾹 누를시에 한번에 클릭밖에 되지 않는다.    계속 눌러야 하는 클릭Ex) - 스탯 업그레이드, 게이지 채우기   1.  스크립트 수정       2. 적용 Button -> OnClick XEvent Trigger 추가 -> Pointer Up, Down 추가 해서 사용    3. 결과

[Unity] - PlayerPrefs란?

PlayerPrefs는 간단한 데이터를 저장하고 불러오는 기능을 제공하는 클래스이다. 주로 게임의 설정, 사용자 선호도, 간단한 진행 상태 등을 저장하는 데 사용된다. PlayerPrefs는 키-값(key-value) 쌍으로 데이터를 저장하며, 이 데이터는 플레이어의 기기에 영구적으로 저장된다. 1. PlayerPrefs 주요 특징로컬 저장PlayerPrefs는 운영체제의 레지스트리(Windows), plist(macOS, iOS), SharedPreferences(Android) 등에 데이터를 저장한다.문자열, 정수, 실수 값만 저장 가능string, int, float 타입만 저장할 수 있다.배열이나 Vector3, bool 등의 데이터는 직접 저장할 수 없으며, 문자열 변환(Serialize) 후 ..

Unity 2025.03.04
728x90