gitdainn / DirectX11_Practice2D

c++ 공부 목적의 DirectX11 라이브러리를 이용한 2D 프로젝트입니다.
0 stars 0 forks source link

[HELP] 엑셀을 이용한 오브젝트 정보 관리 시 각 컴포넌트에 관한 세부 정보 관리 방법 #26

Open gitdainn opened 1 month ago

gitdainn commented 1 month ago

Problem

엑셀을 이용한 오브젝트 정보 관리 시 각 컴포넌트에 관한 세부 정보를 어떻게 관리해야 할지 아이디어가 필요함.

Description

  1. 진행상황

  2. 엑셀 형식

    • 시트마다 ObjectMetaData, ObjectTransform 등으로 분리하여 오브젝트에 대한 정보를 관리하고자 함. image image

Approach

  1. 우리 기존 학원 때처럼 바이너리 파일 하나에 모든 오브젝트의 콜라이더 정보를 저장 -> 각 오브젝트는 엑셀 파일을 읽어 자신이 Create될 때 내부에서 바이너리 파일을 열고 자신의 오브젝트ID로 자신의 콜라이더 정보를 읽어오기 -> 문제점: 오브젝트 하나하나 생성될 때마다 모든 콜라이더 정보가 담긴 바이너리 파일에서 자신의 오브젝트ID와 일치한 정보를 찾아야하는 시간복잡도 최악..

  2. 걍 엑셀에 콜라이더의 구조체 정보까지 다 적고 관리해버리기 -> 문제점: 추가할 컴포넌트는 콜라이더뿐만이 아님.. ColliderAABB, ColliderSphere, 그 외 여러 컴포넌트가 계속 생길텐데 엑셀에 이 모든 정보를 적는 건 말이 안됨.

the Answer I Want

  1. 오브젝트 정보를 엑셀로 관리할 때, Collider, KeyFrame과 같은 각 오브젝트가 보유한 세부 정보는 어떻게 관리해야 하는가?
  2. 특정 방식(바이너리 파일, 엑셀)로 관리한다면 그것을 클라이언트에서 어떻게 효율적으로 읽어오는가?
  3. 현재 제안한 엑셀 관리 형식에서 개선했으면 하는 점이 있는가?

Opinion

먼저 실현 가능하나 매우 비효율적인 방법이다. 라고 생각되었지만 더 효율적인 방법이 떠오르지 않는다면, 매우 비효율적이었던 그 방법이 본인에게 가장 효율적인 방법이니 먼저 구현해보고 그 후에 문제점을 파악 그리고 느껴보면서 효율적인 방법을 유도할 수 있는 과정을 거쳤으면 좋겠음. 내가 다 알려주게 되면 언젠가 또 마주하게 될 때 같은 패턴이 반복될 것임.

Solution

  1. 오브젝트 정보를 엑셀로 관리할 때, Collider, KeyFrame과 같은 각 오브젝트가 보유한 세부 정보는 어떻게 관리해야 하는가?
    • 변수를 선언해서 구조체로 관리. 무엇을 물어보는거지?... 오브젝트 ID값을 만들어서 그 ID에 해당하는 열에 정보를 가져오는 방식 자체를 물어보는건가? ID는 자유롭게 만들겠지만 중복되면 안되겠지. 탐색에 불리해서도 안되고,

1-1. 세부질문 엑셀로 모든 오브젝트(A, B, C)의 정보를 넘길 때 각 오브젝트의 세부 정보==컴포넌트 정보(Collider, KeyFrame) 등의 정보를 어떻게 넘기냐는 질문!

  1. 특정 방식(바이너리 파일, 엑셀)로 관리한다면 그것을 클라이언트에서 어떻게 효율적으로 읽어오는가?
    • 데이터 로드를 효율적으로 하는 방법은 파일 입출력을 최소화하는 것이 첫번째. 반복을 최소화 하는 것이 두번째인데, 가장 간단하게 이걸 하기 위해선 파일 관리를 잘 만들어야겠지 등등 본인이 기준을 정하고 그렇게 최적화를 시작하는거임.
  1. 현재 제안한 엑셀 관리 형식에서 개선했으면 하는 점이 있는가?
    • 먼저 c++ 자체에 엑셀을 불러오는 라이브러리는 내가 알기로 조금 부족한 점이 있다고 알고 있음. C#에서 불러올 때 사용하는 라이브러리가 훨씬 효율적이어서 우리는 C#으로 엑셀을 불러오고, 엑셀 자체를 클라에서 로드하지 않음. 왜냐? 부하 많음. 대부분 엑셀로 기획자가 관리하고 엑셀 자체를 txt 파일로 변환하는 툴을 클라가 제작함. 내가 제작해서 잘 알지만 툴 자체는 시간적 효율성도 중요하지만 버그 안나고 10년 50년 100년 그리고 그 누구가 와도 사용할 수 있고, 어느 클라에서도 불러올 수 있게끔 정리하는 게 중요함. 잘 고민해보기! 엑셀의 시트, 행, 열의 특성을 파악해서 하면 됨.

Reference

참고자료 및 해결할 때 도움될만한 링크 첨부

Etc

ㅋㅋ@@@@@@@빠이팅!@@@@@@@@@ㅋㅋ

limjh1 commented 1 month ago

엑셀로 모든 오브젝트(A, B, C)의 정보를 넘길 때 각 오브젝트의 세부 정보==컴포넌트 정보(Collider, KeyFrame) 등의 정보를 어떻게 넘기냐는 질문!

Collider(position, rotation, offset) KeyFrame( ~~~) 오브젝트마다 가지고 있는 컴포넌트 수도 다르고, 각 세부정보를 구조체로 관리하는건 당연하지만 이걸 엑셀로 관리하는지 바이너리 파일로 관리하는지!

오브젝트별로 땡겨오는게 아니고, 오브젝트를 로드할 때 필요한 컴포넌트를 땡겨오는 방식으로 해야 훨씬 편할것같고. 컴포넌트별로 필요한 데이터를 통일해야함 통일되지 않는다면 그 컴포넌트는 잘못구현된거라는걸 알았으면 좋겠음! 컴포넌트에 대한 개념이 틀려버림.. 이해되기 쉽게 풀어서 이야기한다면 컴포넌트에 특정 데이터를 안쓴다면 0으로라도 채워서 보내야한다는 뜻

ex) 컴포넌트 데이터 로드 -> 오브젝트 로드 및 초기화 단계에서 -> 로드해놓은 곳에서 필요한 데이터 find 및 할당. 깔끔 !

limjh1 commented 1 month ago

추가로 이런 방법론적인 방법을 물어본다면 답변해주겠지만 실력 향상에 도움이 크게 되지는 않을 것 같음~! 다 경험을 해봐야 할 수 있고 알 수 있는 것들이라고 생각해서! 근데 진짜 난 꼭 더 효율적인 방법을 알고싶어!! 그리고 있을거같아!! 하면 물어봐도 되긴함.. 대신 기회를 놓치는거라고 생각해 코테로 비교하자면 답지를 보면서 푸는것도 도움이되고 실제로 그 방법도 사용하지만, 답지 안보고 더 시간을 쓰고 더 힘들고 어렵게 답답하게 공부하는 사람이 실제 시험 합격률도 높다. 와 똑같음!

앞으로 물어볼때는 다 만들어두고나서, 이렇게 해봤는데 이런거때문에 너무 안좋은거같은데 혹시 더 좋은 생각이 있나 피드백 요청을 했으면 좋겠음!..

지금도 '비효율적'이라는 방식으로 한다고 했지만 그 방식이 다인이 입장에서 가장 효율적인거고 그 방식으로 만들어놓는다고 했지만, 막상 내 방식보면 다시 만들거아녀. 다 하고나서 판단 ㄱㄱ 근데 진짜 이건 너무 아니다 싶으면 버릴 줄도 알아야하고 그렇지만 이 버릴 줄 알아야하는 실력 자체가 버릴 수 있는 코드를 왕창 만들어봤을 때 이야기.

limjh1 commented 1 month ago

요약 : 지금 이거는 내가 대신 구현해주는거랑 다를게 없어!!!!!!!!!!!! 왜냐? 방법을 알면 코드 타자 치는것 자체는 어려운게 아니니까!!

내가 도와주려는 취지와 주제는, 개념론적(렌더링 등) 어려움, 문법 어려움, 에러 해결 너무 안됨! 그냥 아예 구현 아이디어가 떠오르지 않아서 불가능한거같음!!! ㅜㅠ 이거랑 스컬 제작 상황을 보고 이런것들 해보면 어때?, 이거랑 다 만들어봤는데 이거 너무 별로인거같애. 근데 뭐가 별로인지는 알겟는데 어떻게 더 좋게 할 수 있는지 너무 궁금해! 이것저것 시도해봤는데 다 비슷비슷한거같은데 혹시 피드백가능한가? 요거!

어떤 방식이든 구현 아이디어 자체가 떠올랐다면 물어보지 않았으면 좋겠다~ 요말