전체 글 66

7/8 - 링 ID 28, 29, 32번

오늘은 링 ID 28(추적), 29(즉사), 32(동면)번을 구현했다. 위 짤에서 앞에서부터 순서대로 각각 28, 29, 32번 링이다. 마지막 분홍색은 28번 링의 효과를 보여주기 위해 넣은 18(결계)번 링이다. 1) 28번은 가장 적이 뭉쳐있는 곳을 공격하여 범위 내에 있는 모든 적에게 피해를 입힌다. 그리고 타겟 스탯이 증가해도 실제로 공격하는 수가 증가하는 것이 아니라 최종 피해량이 50%씩 증가한다. 구현에서 가장 복잡했던 부분은 가장 적이 모여있는 곳을 찾는 것이었다. 이는 모든 몬스터-몬스터 간 Vector2.Distance()로 구한 거리가 추적 링의 타격 시 반경인 chaseRadius값보다 작은 것들이 가장 많은 몬스터를 선정하여 해당 적에게 Bullet을 발사하도록 했다. 그후 공격..

7/7 - 링 ID 25~27번

행운의 7월 7일! 그리고 오늘은 대전으로 내려왔다(아이 기뻐라). 나름 서울에서 산지 1년 반 지났는데도 난 여전히 대전이 좋당. 왠지 개발도 더 집중될 것 같고 그래 흠. 요 며칠 친구들 만나느라 개발에 소홀했는데 가끔 밭에 가는 날 빼면 이젠 매일매일 할거다. 암튼 오늘은 25(돌연변이), 26(성장), 27(천사)번 링을 구현했다. 위 짤에서 앞에서부터 순서대로 25, 26, 27번 링이다. 1) 25번 링은 생성 시 자기자신을 포함하여 덱에 있는 링들 중 하나로 변한다. 단, 생성 개수에 제한이 있는 링들로는 변하지 않는다(그 예 중 하나가 오늘 구현한 27번 링으로 전투 내내 최대 1개만 생성할 수 있다). 그래서 TryPutRingIntoBattle()함수에서 genRing.ringBase...

7/3 - 링 ID 22~24번

어제 코드 싹 정리하고 난 뒤, 오늘은 링 ID 22~24번을 구현했다. 짤의 첫 세 개 링이 순서대로 22(폭격), 23(증폭), 24(처형)번 링이고, 마지막은 사령관 링으로 24번 링의 타겟이 랜덤이기 때문에 테스트를 위해 넣었다. 1) 22번 링은 배치한 위치에서 공격 범위 내에 있는 모든 링에 데미지를 입히고 사라진다. 그래서 SetTarget()함수로 타겟들을 모두 잡은 뒤 targets 리스트에 저장된 모든 몬스터들에 피해를 주도록 했다. 2) 23번 링은 공격 범위 내에 있는 모든 몬스터들이 받는 최종피해를 20% 증가시킨다. 따라서 11(눈보라)번 링과 비슷한 방식으로 직접 공격을 하지 않는 대신, Amplifier라는 컴포넌트를 가지는 오브젝트를 풀에서 가져오도록 했다. Amplifie..

6/30 - 링 ID 16번 // 7/1 - 공격 파티클 개편, 링 ID 20, 21번

어제는 16(귀환)번 하나밖에 안만들어서 기록을 건너뛰었다. 그리고 오늘 만든 링은 20(절단), 21(저주)링이다. 각각 짤의 두/세번째 링이다. 오늘은 아주 중요한 변경점이 있었다. 첫번째는 기존의 공격 파티클을 관리하는 방식을 바꾼 것, 두번째는 링을 덱에서 제거 시 앞으로 사용되지 않을 오브젝트 풀에 있는 오브젝트들을 삭제하도록 한 것이다. 0) 어제만든 16번 링은 짤에 담겨있진 않지만 일정 확률로 몬스터를 시작 위치로 되돌린다. 이는 movedDistance를 0으로 만들어주면 PathCreator가 Path의 시작점으로 위치를 대응시켜주기 때문에 간단하게 구현할 수 있었다. 1) 20번 링은 랜덤한 대상을 공격하며 적 "현재" HP 비례 데미지를 입힌다. 그래서 타격한 몬스터의 curHP와 ..

6/29 - 링 ID 12~15번

오늘은 링 ID 12(저격), 13(마비), 14(연사), 15(슬레이어)번 을 구현했다. 짤의 앞쪽 네개가 12, 13, 14, 15번 링이다. (마지막은 19번 사령관 링으로 연사 링의 타겟이 랜덤이기 때문에 이를 테스트하는 용도로 넣어놓았다.) 1) 12번 링은 가장 HP가 높은 적을 공격한다. 따라서 10(약자)번 링을 구현했을 때처럼 타겟을 HP순으로 정렬하되 내림차순으로 정렬하여(OrderByDescending) 리스트 앞쪽부터 공격하도록 했다. 2) 13번 링은 앞쪽부터 공격하여 일정시간 마비시킨다. 3(눈꽃)번 링 처럼 공격 시 paralyzeTime과 paralyzeEndTime을 갱신하며, 마비가 지속되어야 하는 경우 몬스터의 curSPD를 0으로 만들어 움직이지 못하도록 했다. 3) ..

6/28 - 링 ID 11, 18번

오늘은 링 11(눈보라), 18(결계)번을 구현했다. 1) 11번 링은 짤에서 초록색 링이다(게임 바뀌면서 컨셉 또한 바뀐 링이라 색깔이 초록색이다...). 공격 범위 내에 있는 모든 링에 둔화를 걸고 매 초 공격한다. 11번 링이 게임에 배치되면 Blizzard라는 component를 가진 오브젝트를 자신의 위치에 생성한다. 그리고 Blizzard는 자신의 콜라이더내에 들어오는 몬스터를 감지해서 monster라는 배열에 넣는다. 이는 OnTriggerEnter2D와 OnTriggerExit2D로 몬스터의 출입을 확인한다. 그리고 1초마다 부모링의 curATK값으로 배열 내 모든 적에게 데미지를 준다. 2) 18번 링은짤에서 분홍색 링이다. 랜덤한 위치에 Barrier라는 component를 가진 오브젝..

6/25 - 링 ID 7, 8, 19번

오늘은 7(생산), 8(약탈), 19(사령관)번 링을 구현했다. 직전에 쓴 글을 보니까 뭘 구현한건지 별로 설명이 잘 안된 것 같아서 오늘부터는 링 설명도 조금 추가하려고 한다. 7, 8번은 RP(링 생성시 소모하는 것)를 생산하는 링이고 19번은 타겟이 랜덤인 링들에게 일정 확률로 공통 타겟을 정해주는 링이다. 짤에서 보이는 세/네/다섯번째의 링(파랑, 군청, 노랑)이 각각 7, 8, 19번이고, 첫번째(하늘색)는 타겟 수를 늘리는 시너지를 가진 1(전기)번 링, 두번째(초록색)는 타겟이 랜덤인 5(맹독)번 링이다. 1) 보다시피 5번 링은 1번링의 공격 범위 밖이라 타겟수 버프를 받지 않음에도 19번 링의 범위 내 가장 앞쪽 몬스터를 일정 확률로 공격하고 있다. 이는 타겟이 랜덤이기 때문으로, 다른 ..

6/23 - 링 ID 3~6, 9~10번

오늘은 6개의 링(3, 4, 5, 6, 9, 10번)을 구현했다. 특별히 전날과 비교하여 구현하는데에 있어 특이한 점이 없었다. 중간에 빈 번호인 7, 8번은 RP를 생산하는 링이기 때문에 Bullet을 발사하지 않으며 때문에 파티클도 링에서 플레이해야 한다. 따라서 작동 방식이 다른 링과 매우 달라서 일단 스킵하고 다른 링들을 먼저 만들었다. 내일은 빠진 7, 8번 링과 타겟이 랜덤인 링에 영향을 주는 19번을 구현할 것이다. - 링 ID 7, 8, 19번 구현

6/22 - 링 ID 1, 2번 & 시너지 적용 방식 변경

오늘은 링 1, 2번을 구현했다. 사실 더 구현할 수 있었는데 내가 0번을 구현할때 아주 아주 큰 실수를 했다는 것을 깨달아서 그걸 고치느라 생각보다 적게 구현했다. 1) 링을 배치할 때 다른 링으로부터 시너지를 받는 경우 범위 계산을 새로 배치한 링 기준으로 해버리는 큰 실수를 저질렀다. 그러니까 범위 4짜리가 배치되어 있는 상태에서 범위 8을 6만큼 떨어진 위치에 새로 배치할때, 새로 배치하는 링은 이전 링의 시너지를 받으면 안된다. 왜냐하면 이전에 있던 링의 범위가 4인데 6만큼 떨어졌으니까. 그런데 멍청하게도 지난번에 구현한 방식은 시너지를 받는다. 근처 링들을 받아오는 GetNearRings() 함수로 얻은 링들은 나의 범위(위의 예시에서는 8)를 기준으로 얻어진거니까!! 해결한 방법은 다음과 ..

6/19 - 링 ID 0번 구현

오늘은 아주 중요한 것을 구현했다. 바로 링의 공격! 베이스 링이나 다름없는 ID 0번 링을 구현했다. 1) 링의 올바른 위치를 파악할때와 같은 방식으로 공격 범위 안에 있는 오브젝트들을 체크하여 몬스터인 경우 공격 대상들을 의미하는 targets 리스트에 넣었다. 2) 각 Ring의 공격은 다음의 순서로 이루어진다. a. targets 리스트를 받아온다. b. 공격할 몬스터 수를 정한다. 이는 링의 "타겟 수 스탯"과 "targets 리스트의 원소 개수" 중 더 작은 값이다. c. 링의 종류에 따라, 무작위로 또는 targets를 정렬한 뒤 앞에서부터 공격 대상으로 삼는다. b. 각 공격대상 마다 Bullet을 오브젝트 풀에서 가져와 부모(현재 Ring)와 타겟을 정해준 뒤 활성화한다. e. Bulle..