광산의 레벨에 따른 랜덤 광물 생성

이재형·2025년 6월 13일

MinerFergus 개발 정리

목록 보기
4/10
post-thumbnail

개발 목적

광산마다 레벨에 따른 광물의 가중치를 설정하고,
각 광물이 등장할 확률(가중치)을 제어하여 플레이 경험에 다양성을 부여

구조 진행 순서

1. 광산SO 생성
2. 광물SO 생성 및 데이터 추가
3. 랜덤 가중치의 광물 데이터 값 연결


1. 광산 SO 데이터 구성

생성을 하기전에 광물의 가중치를 설정하기 위한 광물SO와 광물의 가중치 변수로 이뤄진 OreWeight를 생성

이제 ScriptableObject를 상속하고 위에 생성한 가중치클래스를 배열로 생성을 합니다. 그 아래에 RandomOre 메서드가 있는데 이건 이후에 설명하도록 하겠습니다.

광산SO를 생성하고 광물별로 SO와 가중치를 추가(None은 광산이 모두 광물로 채워지면 안되기 때문에 빈 공간을 나타냄)


2. 광물 SO 데이터 구성

광물에 해당하는 기본 정보 (이름, 이미지, 체력 등)에 해당하는 값을 타입에 맞게 필드를 생성

minCount와 maxCount는 광물 채광 시 드랍 아이템 수량 범위

필드 중에 [Range]가 있는데 변수의 값을 슬라이더로 조절하는 기능


3. 랜덤 광물 선택 알고리즘

맵이 생성 시 현재 광산 레벨의 모든 가중치의 값을 합산하여 변수로 저장하고 Random 매개변수의 최대값하여 랜덤 Int변수에 저장

아까 설명하지 못한 RandomOre메서드 랜덤으로 저장한 변수를 매개변수로 설정

랜덤 숫자가 광산SO에 있는 광물가중치의 배열에 있는 가중치의 값을 foreach로 가중치를 빼서 해당 값이 음수가 될때 현재 가중치의 광물SO를 반환하는 메서드

다시 위로 올라가서 반환된 광물SO가 null일때는 오브젝트는 비활성화를 시키고 반환된 SO가 있다면 SO의 데이터를 각 컴포넌트 값으로 초기화 해주게되고 광물의 가중치로 인한 생성


실제 인게임 이미지

광산의 가중치 SO를 눈에 띄게 극한으로 변경하여 표시하도록 함

1. 빈 공간의 가중치를 극한으로 변경했을 때

광산 SO

인게임 이미지


2. 은 광물의 가중치를 극한으로 변경했을 때

광산 SO

인게임 이미지

마무리 요약

- 광산과 광물을 SO기반으로 데이터 설계
- 가중치를 기반으로 랜덤 다양성 확보
- 확장성과 유지보수에 강한 구조로 향후 설계가 유용

profile
한국사람

0개의 댓글