바쁘다 바빠 협업 사회!
어제는 역할을 정했고 오늘은 본격적인 팀 프로젝트 시작이다. 각자 작업한 내용물을 머지하고, 수정하고, 피드백 받고의 연속....
내꺼 다구현했으니 잠깐 강의를 듣고 있을까 하면 개인 DM으로 수정부탁이 온다. 수정하면 바로바로 공유도 해야 한다. 뭔가...진짜 회사에서 이렇게 일하지 않을까?? 하는 생각이 들었다. 바로바로 수정하라는 연락이 오니까 무섭기도 하지만 고쳐나가는게 재밌기도 했다!
내가 담당한 부분은 몬스터 종류, 몬스터 상태, 몬스터 랜덤 생성이다.
public enum MMONSTERTYPE
{
MINION,
VOIDWORM,
SIEGEMINION
}
enum으로 몬스터를 정리했다.
public class MonsterStatement
{
public string monsterName { get; set; }
public int Lv { get; set; }
public int monsterHP { get; set; }
public int monsterATK { get; set; }
public MonsterStatement(string name, int lv, int hp, int atk)
{
monsterName = name;
Lv = lv;
monsterHP = hp;
monsterATK = atk;
}
//몬스터가 중복 생성될 때 사용
public MonsterStatement Clone()
{
return new MonsterStatement(
monsterName,
Lv,
monsterHP,
monsterATK
);
}
}
필요한 스탯은 레벨, 체력, 공격력이므로 변수로 선언하고, Clone()메서드도 생성한다. 이것은 MonsterStatement를 복제래 각 몬스터 인스턴스가 독립적인 스탯을 갖게 해주는 기능이다.
private static readonly Dictionary<MMONSTERTYPE, MonsterStatement> monsterPresets =
new Dictionary<MMONSTERTYPE, MonsterStatement>
{
{MMONSTERTYPE.MINION, new MonsterStatement("미니언", 2, 15, 5 ) },
{ MMONSTERTYPE.VOIDWORM, new MonsterStatement("공허충", 3, 10, 9) },
{ MMONSTERTYPE.SIEGEMINION, new MonsterStatement("대포미니언", 5, 25, 8) },
};
키 : MonsterType, 값 : MonsterStatement을 사용한 사전이다. 이걸 이용해 몬스터 랜덤 생성을 구현할 수 있다. static readonly를 사용해 프로그램 실행 중 딱 한 번만 초기화되고, 이후 변경되지 않는다.
//랜덤
private static readonly Random random = new Random();
public static Monster CreateRandom()
{
var types = monsterPresets.Keys.ToArray();
var randomType = types[random.Next(types.Length)];
return Create(randomType);
}
/////////////
...
/////////////
public static void MonsterRandomSpawn()
{
// 1~4마리 랜덤 등장
int count = random.Next(1, 5);
if (currentWave == null)
{
currentWave = new List<Monster>(count);
for (int i = 0; i < count; i++)
{
currentWave.Add(CreateRandom());
}
}
foreach (var m in currentWave)
{
GameManager.UI.PrintRandomMonster(m);
}
Console.WriteLine();
}
사실 아직 팀 프로젝트가 마무리 된 것이 아니라 모든 코드가 다시 수정될 수 있다. 가장 자주 수정되는 스크립트가 이 스크립트인데 현재 상태를 가져왔다.
몬스터는 1~4마리가 등장하고 중복도 허용한다. currentWave리스트가 처음에 비어있다면 1~4까지의 랜덤한 수만큼 리스트에 공간을 만들고 거기에 아까 만든 몬스터 사전인 monsterPresets를 배열로 받아 인덱스를 랜덤 추출한 CreateRandom()메소드를 추가한다.
이렇게 하면 몬스터가 중복이 허용된 1~4마리가 출력된다!
첫날에 분명 집중하며 들으려 했지만 살짝 졸아버린 관계로 오늘 시간을 내어 강의를 다시 들었다. PR에 대한 설명을 좀 돌려가며 들었다. 같은 스크립트를 작업했다면 PR에서 오류가 뜬다는데 그런 문제가 생길 경우 사실 그냥 겹친 사람들끼리 합의해서 하나 살리기 뭐 이런식으로 처리한다고 하셨다. 우리팀은 시도는 해봤지만 아예 사용하지 않고 합치기 전용 브랜치를 만들어서 PR 없이 바로바로 커밋하는 분위기가 되어 실습을 해보진 못했다. 이번주에 해볼 수 있는 기회가 또 있지 않을까?
컨트롤 a -> k -> f : 작업하다보면 코드들이 줄 정렬이 안될때가 있는데 이 단축키를 사용하면 제대로 정렬된다.
컨트롤 시프트 N : 유니티에서 빈 게임오브젝트를 만들 수 있다.