소스 코드를 건드리지 않고 게임을 튜닝할 수 있게 하는 방법
(게임 디자이너가 소스 코드를 건드리지 않고 디자인을 할 수 있도록 하는 법)
> 게임 구성 데이터 파일을 사용한다
게임 구성 데이터 파일의 종류 2가지
CSV 파일 (Comma-Separated Value)
쉽게 내보낼 수 있음: 스프레드시트 프로그램에서 데이터를 쉽게 CSV 형식으로 저장할 수 있다.
읽기 어려움: CSV 파일의 원본 데이터를 읽기 어렵다. 데이터가 단순한 텍스트로 나열되기 때문이다.

XML 파일 (eXtensible Markup Language)
읽기 쉬움: XML 파일은 구조화된 형식으로 데이터를 저장하므로 사람이 읽기 더 쉽다. 태그를 사용하여 데이터의 의미를 명확히 할 수 있다.
커스텀 XML 편집기 필요: XML 파일을 사용하기 위해서는 특별한 편집기가 필요할 수 있으며, 이를 위해 맞춤형 XML 편집기를 만드는 것이 좋다

유니티에서 게임 구성 데이터 사용하여 코드 작성


CVS 파일 (상 엑셀, 하 노트패드)
ConfigurationData 클래스

- 다른 클래스에서 접근할 수 있는 클래스이다
- 변수의 값을 저장하는 컨테이너
- cvs 파일명을 string에 저장한다
- 미리 변수의 디폴트값을 지정한다 (파일에서 지정값을 불러오지 못해도 실행이 가능하도록)

- 필드에는 접근을 못하지만, 속성은 모두 접근할 수 있도록 한다
- 모든 필드에 대한 속성이 존재한다

- csv 파일을 읽을 수 있도록 StreamReader 객체를 저장한다
- Path.Combine 메서드로 경로를 결합한다. 유니티의 에셋에 파일이 존재한다면 따로 파일을 불러올 필요없다.
- 파일의 텍스트를 읽어서 변수에 저장한다
- 예외 발생을 catch에서 잡아주고 finally에서 파일을 닫는다

- CSV 파일에서 설정되어 있는 값으로 해당 변수의 값을 지정하고 있는 코드이다
- 이 코드에서는 해당 변수들의 순서를 알고 있다고 가정하고 있다
- split 메서드를 사용하여 ',' 로 값을 끊고, 값들을 string 리스트에 저장하고 있다
ConfigurationUtils 클래스

- 유틸리티 클래스를 만들어서 모든 객체가 직접 구성 데이터를 가지고 다니지 않도록 한다
- 유틸리티 클래스는 게임 내의 여러 객체가 필요할 때 정보를 쉽게 가져올 수 있도록 도와주는 역할이다
- static 속성(객체가 필요없는 속성)인 것을 제외하면, 구성 데이터가 제공하는 데이터와 똑같은 구성이다
- 리턴값을 객체 랩핑(Object Wrapping: 객체를 다른 형태로 감싸서 사용하기 쉽게 만드는 것 )해줬다.
configurationData.TeddyProjectileImpulseForce 로 랩핑을 하여 특정 객체의 속성값에만 접근하게 한다.
특정 객체의 속성값에만 접근할 수 있으므로 정보에 안전하고 간편하게 접근할 수 있다.

- Configuration의 클래스에서 초당버거이동속도(속성값)을 가져왔다
- ConfigurationUtils의 속성에 있는 값을 변경하고 싶으면 소스 코드가 아닌, csv 파일의 값만 변경하면 된다

- 마지막으로 ConfigurationData 객체를 생성 및 초기화하면 된다
- ConfigurationData 객체를 생성, ConfigurationData 객체의 생성자처럼 파일을 열고 값을 읽어들여 필드로 파싱
(Parsing: 데이터를 특정한 구조로 나누어 해석하는 과정, 데이터 구조를 이해할 수 있는 형식으로 변환할 때 사용 )

- awake 메서드에서 Initialize 메서드를 호출하면 Start 메서드가 호출되기 전에 awake 메서드가 호출된다
- 오브젝트가 시작 메서드를 실행하기 전에 ConfigurationUtils와 ConfigurationData를
파일에서 실제로 다시 불러오고 모든 설정이 완료되도록 할 수 있다
'코딩 공부 > Unity C#' 카테고리의 다른 글
클래스 상속 (0) | 2024.07.30 |
---|---|
PlayerPrefs (0) | 2024.07.26 |
텍스트 파일 입력 및 읽기 예제 풀이 (0) | 2024.07.25 |
텍스트 파일, 작성 및 읽기 (StreamWriter, StreamReader) (2) | 2024.07.25 |
예외 처리기 try, catch (0) | 2024.07.25 |