RE : 격 자 : 세번째 프로젝트 # 2 : 맵 구조 수정

2024. 8. 3. 03:33·개발/FRACTiLE

개요

잡다한 구조 수정은 일단 넘기겠습니다.

간단하게라도 설명하고 가자면 플레이어 싱글톤인게 맘에 안들어서 플레이어 매니저를 따로 만들어줬습니다.

 

 


 

 

Entity

일단 맵 구조를 수정하기 전에 Player와 Entity를 동시에 묶어주는 Entity 클래스를 만들어 주었습니다.

 

그 이유는 이 글에서 찾을 수 있습니다.

https://sundg0162.tistory.com/44

 

Default Defense | 다섯번째 프로젝트 # 4 : Entity

개요저번 글 적고 바로 적는 개발일지입니다.제가 어제 하루종일 적은 코드니 아직 머릿속에 생생합니다.     Vector2Entity를 적기 전에 일단 각각의 위치들을 훨씬 원활하게 관리하기 위해 Vecto

sundg0162.tistory.com

 

당연히 들어가기 귀찮으시겠죠? 그래서 제가 긁어왔습니다.

 

*여기서 vector는 C#에서의 List와 같습니다.

 

Cell구조를 통해 칸에 있는 Entity들을 검사 할때 적도 플레이어를 감지해야하고 플레이어도 적을 감지해야하니 따로 변수를 2개 만들기보단 Entity라는 부모 클래스를 통해 묶어줌으로써 하나의 변수로 관리하려는 것입니다.

 

일단 당장 Entity가 가져야할 것은 없습니다.

왜냐하면 아직 대대적인 구조 수정이 일어나지 않았기 때문이죠.

 

그러니 묶어주기용으로 일단 비어있는 클래스를 적어줍니다.

 

public abstract class Entity : MonoBehaviour
{

}

 

이러면 일단 Entity는 끝입니다.


 

 

Cell

익숙하죠? Default Defense에서 봤던 그겁니다.

 

딱히 설명할 건 없다고 생각합니다.

 

굳이 MonoBehaviour를 상속할 필요가 없는(GameObject로 존재해야 할 이유 X) 클래스기 때문에 일반 클래스로 만들어줍니다.

public class Cell
{
    public Vector2 pos;
    public List<Entity> entityList;
    
    public Cell(Vector2 pos)
	{
    	this.pos = pos;
	}

    public void RegisterEntity(Entity entity)
    {
        entityList.Add(entity);
    }

    public void UnregisterEntity(Entity entity) 
    {
        entityList.Remove(entity);
    }

    public List<Entity> GetEntities()
    {
        return entityList;
    }

    public List<T> GetEntities<T>() where T : Entity
    {
        return entityList.Where(x => x is T).Cast<T>().ToList();
    }
}

 

 

이제 이 Cell을 만들어줘야겠죠.

 

 


 

 

GridManager

일단 배열을 만들어줍니다.

public Cell[,] gridCell = new Cell[10, 10];

 

그리고 배열을 초기화 해줍니다.

위치를 따로 구해주는 이유는 코드에서 보시다싶이 배열에서의 index와 실제 위치가 다르기 때문이에요.

public void Init()
{
    row = 9;
    column = 9;
    gridSize = new Vector2(9, 9);
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            gridCell[i, j] = new Cell(new Vector2(i - 5, j - 5) + (Vector2)offset);
        }
    }
}

 

 

이러면 이제 Cell구조는 끝입니다. 나머지 Enemy와 Player를 수정만 해주면 되죠.

 

그래서 그 문제의 구조가 뭐임?

그 문제의 구조는 플레이어가 공격할떄 적을 색적하는데에서 발생합니다.

 

Cell구조가 없었기 때문에 어떠한 칸에 Enemy가 존재하는지에 대해 몰랐어요.

그러다보니 모든 Enemy를 갖고와서 내가 공격하는칸에 있는지를 비교해보는 코드를 사용했습니다.

 

그 코드는 이렇게 생겼어요.

 

잡다한거 다 건너뛰고 중요한것만 봐도 Weapon의 히트 박스를 하나씩 돌면서 그 안에서 모든 Enemy를 갖고와서 위치가 일치하는지를 확인한 다음 공격을 합니다.

 

이러면 만약 10x10 맵에 적이 가득 차있다면 공격 범위가 단 한칸이여도 한번 공격할떄마다 100번의 비교가 일어납니다.

공격 범위가 8칸 이라면 800번의 비교가 일어나겠죠.

 

말이 안되죠? 하지만 지금 수정한 구조는 다릅니다.

 

깔끔하죠?

 

 


 

 

 

마치는 말

솔직히 이전 구조를 담은 글을 적은 것도 아니고 저런거 수정해서 생기는 사소하고 잡다하고 아주 많은 변경 사항을 담기엔 글이 말도 안되게 길어지고 무엇보다 제가 너무 힘들어요. 

아 그냥 Cell구조를 적고 만들었구나 정도만 전달 됐으면 좋겠습니다.

'개발 > FRACTiLE' 카테고리의 다른 글

[FRACTiLE] | 정적 클래스 기반 Input System과 InputBindingComposite  (8) 2025.04.14
FRACTiLE  (2) 2025.04.13
RE : 격 자 : 세번째 프로젝트 # 1 : 튜토리얼 구조 수정  (2) 2024.07.31
RE : 격 자 : 세번째 프로젝트 # 0 : 리메이크? 리워크?  (1) 2024.07.23
격 자 | 세번째 프로젝트  (0) 2024.03.03
'개발/FRACTiLE' 카테고리의 다른 글
  • [FRACTiLE] | 정적 클래스 기반 Input System과 InputBindingComposite
  • FRACTiLE
  • RE : 격 자 : 세번째 프로젝트 # 1 : 튜토리얼 구조 수정
  • RE : 격 자 : 세번째 프로젝트 # 0 : 리메이크? 리워크?
SundG0162
SundG0162
블로그 프로필은 머핀입니다.
  • SundG0162
    게임개발고수가될거야
    SundG0162
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • 주저리 (2)
        • 잡담 (1)
        • 장현우 (0)
        • 회고록 (1)
      • 개발 (50)
        • CITADEL : 성채 (1)
        • HEXABEAT (1)
        • FRACTiLE (6)
        • UNNAMED (9)
        • Default Defense (10)
        • T-Engine (1)
        • Project EW (0)
        • 졸업작품 (0)
        • Unity (3)
        • C# (4)
        • C++ (13)
        • WinAPI (1)
        • 그 외 (0)
      • 알고리즘 (13)
        • C# (1)
        • C++ (12)
      • 자료구조 (2)
        • C++ (1)
        • C# (0)
        • 공용 (1)
      • 기타 (10)
        • 아트 (6)
        • AI (2)
        • 수학 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코드트리
    코딩
    티스토리챌린지
    코딩테스트
    AI
    오블완
    코딩트리조별과제
    LLM
    생성형ai
    유니티
    C#
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
SundG0162
RE : 격 자 : 세번째 프로젝트 # 2 : 맵 구조 수정
상단으로

티스토리툴바