전체 글 (193)

  • 01:21:17
  • 2024.11.01
  • 2024.10.31
  • 2024.10.23
  • 2024.10.08
  • 2024.10.06
  • 2024.10.04
  • 2024.09.21
  • 2024.09.18
  • 2024.09.03
  • 2024.08.29
  • 2024.08.17
  • 11
    07

    오늘 받은 메일

    평소에 GPT4-o 를 잘 쓰고 있던지라 유니티 AI가 궁금하기는 했다.

    실험프로그램에 참여하면 구독 없이 써 볼 수 있다고 해서 일단 신청을 넣어두었는데, 1~2일 내에 다시 메일이 온다고 한다.

    반응형
    COMMENT
     
    11
    01

    아래는 GPT로 정리한 해결 가이드


    상품 페이지

    1. 캡슐 이미지 문제:
      • 문제: 캡슐 이미지에서 로고나 제품명이 음악 배너로 가려져 있습니다.
      • 해결 방법: 다음 캡슐 이미지들이 로고나 제품명이 잘 보이도록 수정해야 합니다.
        • 헤더 이미지 (header.jpg)
        • 소형 캡슐 (capsule_231x87.jpg)
      • 참고 자료: 스팀의 캡슐 이미지 가이드라인을 확인하여 기준에 맞게 수정하세요. 캡슐 이미지 가이드라인.
    2. 설명 중복 문제:
      • 문제: 설명에 트랙 리스트가 포함되어 있어 메타데이터에 표시된 트랙 리스트와 중복됩니다.
      • 해결 방법: 설명에서 트랙 리스트 부분을 삭제하여 중복을 피하세요.
    3. 시스템 요구 사항 문제:
      • 문제: 시스템 요구 사항에서 일반 음질 파일과 고음질 파일 모두 동일한 크기가 표시되어 있습니다.
      • 해결 방법: 파일 크기가 정확히 반영되었는지 확인하세요. 표준 MP3 오디오만 제공하는 경우, 고음질 오디오 관련 언급은 삭제하는 것이 좋습니다.

    사운드트랙 파일

    1. MP3 파일 필수 요구 사항:
      • 문제: 스팀에서는 모든 사운드트랙에 MP3 파일이 포함되어야 합니다.
      • 해결 방법: Normal 디포에 MP3 형식의 사운드트랙 파일을 다시 업로드하세요.
    2. 고음질 파일 (선택 사항):
      • 문제: MP3가 아닌 고음질 파일은 별도의 Optional High-Quality 디포에 업로드해야 합니다.
      • 해결 방법: MP3 외의 고음질 파일이 있는 경우, Optional High-Quality 디포에 추가하고 설명에 해당 내용을 언급하세요.
    3. 디포 설정 오류:
      • 문제: 현재 고음질 파일이 "normal audio" 디포에 설정되어 있어 문제가 됩니다.
      • 해결 방법: 디포 설정을 다음과 같이 수정하세요:
        • Normal 디포에는 MP3 파일만 포함시킵니다.
        • Optional High-Quality 디포에는 고음질 형식의 파일을 포함시킵니다.
      • 참고 자료: 스팀의 사운드트랙 디포 설정 관련 문서를 확인해 보세요. 사운드트랙 디포 설정 가이드.

    다시 정리

    • Normal 디포에 기존 업로드했던 WAV파일 대신 MP3 파일을 다시 업로드 할 것
    • 기존 업로드 했던 WAV 파일은 Optional High-Quality 디포 로 수정
    • 캡슐 이미지(헤더 이미지, 소형 캡슐) 가이드에 맞게 수정
    • 설명에서 트랙 리스트에 관한 내용 빼기

    캡슐 이미지
    ChatGPT QA
    새로 업로드 할 헤더 이미지
    사운드트랙 설명

    MP3파일용 디포, WAV파일용 디포를 새로 파고 각각 업로드.

    가장 빠른 번호의 디포(앱 디포)를 꼭 채워야 하는 것 같다.

     

    내 경우에는 앱 디포 번호가 ~~~~21 이었고

    1차 시도에서

    MP3파일용 디포를 ~~22번에, WAV파일용 디포를 ~~23번에 생성했는데 21번이 비어있는 상태라 진행이 안되었다.

    위 디포들을 지우고 다시 21번에 MP3, 22번에 WAV용 디포를 작성하고 파일을 업로드했다.

    이 체크표시를 해결하기 위해 거의 한 시간을 찾아 헤멨다.

    상점 및 Devcomp 패키지 일치
    출시 테스트를 위해 귀하의 devcomp 패키지는 반드시 상점 패키지와 같은 디포를 포함해야 합니다.

    진짜 한참을 헤멨다. 아래와 같은 packagelanding 주소를 가지는 페이지에서 작업이 필요했었다.

    packagelanding

    '포함된 디포' 에 현재 사용하고 있는 디포 중 누락된 게 있어 포함시켜주었다.

    패키지랜딩 페이지에 어떻게 찾아갔는지, '뒤로가기'를 눌러 이전 페이지로 돌아가서 다시 찾는데도 한참이 걸렸다(...)

    '관련 패키지 및 DLC' 하단의 내용 중

    위 보이는 스크린샷에서, 빨간색 패키지를 클릭하면 나오는 페이지였다

    아무튼 해결

    2차 검토 신청을 하자

    반응형
    COMMENT
     
    10
    31

    한개 서버로 여러 서비스 폴더별로 구분하여 관리

    파일 시스템 구조

    • 미리보기

    서비스 생성

    새로운 서비스(앱, 게임 등) 생성 시, GameData, UserData, OtherData 폴더가 함께 생성되도록 하고, UserData 폴더에는 Info.json 파일을 생성하여 신규 유저의 UID 부여에 참고하도록 한다.

    {"next_uid": "000000000"}

    유저 정보 생성(회원가입)

    회원가입을 위해 서비스 이름, 입력ID, 입력Password와 함께 서버에 요청한다.

    1. 서비스가 있는지 확인, 겹치는 유저 ID가 있는지 확인
    2. (입력Password + 16자리의 salt) 를 해시 암호화 한 패스워드를 얻는다
    3. UID의 폴더를 생성하고, Base.json을 작성한다.
      1. uid, id, pass, salt 를 보관한다.

    데이터 백업 압축파일 다운로드

    백업했던 데이터 업로드하여 복원(덮어쓰기)

    게임 데이터 업로드(기존 서버의 게임 데이터를 덮기)

    게임 데이터 GET

    로그인 기능

    • SERVICE 내 ID PASS 검증.(즉 이 세 요소를 서버에 같이 전송해야함)
    • 토큰발행 후 유저에게 전송, 서버에 보관, (토큰-UID) 쌍이면 괜찮으려나
      • 아까 UserData 폴더 내에 Info.json 파일로 UID 관리했듯이, Token.json 하나 미리 마련해두고 여기에서 동적으로 관리하면 될 것 같다.

    로그아웃 기능

    • 클라이언트 앱이 종료되거나, 로그아웃 버튼을 누르면 서버에서 로그아웃 기능 수행. Key값이 해당 계정의 토큰값인 아이템을 삭제하면 되나?
    • 또는 토큰이 추가된 후 일정 시간(24시간?) 지난 게 확인되면 역시 보관된 아이템을 삭제하면 될듯. 만약 삭제된 뒤로 유저가 토큰으로 유저데이터에 접근을 시도할 경우, 클라이언트에 “님 지금 토큰이 보관되어있지 않은 것 같은데 로그인좀 다시 하셈” 이라고 메시지를 보내면 될 것 같다.

    유저 데이터 통으로 업데이트

    유저 특정 데이터 업데이트

    유저 데이터 모두 얻기

    유저 특정 데이터 얻기

    랭킹 시스템(업로드)

    Get 랭크보드(상위 N명)

    반응형
    COMMENT
     
    10
    23

    1 인턴 개요

    하루 네 시간 인턴 활동, 10월 중순부터 12월 중순까지 두 달 간 진행한다.
    시급 1만원 계산으로 두 달 160만 지원금 지급. 용역 계약으로 적혀 있어 인턴으로써 급료를 받는 건 아니다.
    매칭된 회사에 출퇴근하기 위해 판교로 거주지를 이동했다.

    2 주요 활동

    현업 팀장 및 인턴 팀원과 두달 간 한 개의 게임을 기획부터 완성까지 진행한다. 성공적으로 완료하여 정식 채용가지 이어지면 좋겠다.

    3 기타

    판교, 퇴근 시간 교통체증이 자비가 없다.
    버스를 타고 귀가를 해야 하는데 사람이 너무 많아 다 타지 못해 다음 버스를 기다렸다. 배차간격도 무자비했다.
    거주 고시원 근처에 새벽 5시 반까지 열려있는 넓은 카페가 있어 좋다.

    반응형
    COMMENT
     
    10
    08

    작업 과정

    • 타일맵을 통해 플랫폼 작성
    • Aseprite 에셋 가공
      • 애니메이션 클립과 컨트롤러 Export 하여 수정 후 사용

    • UI 작성(1개 캔버스에 다중 패널식)
      • Title - 게임시작 버튼
      • 전투 - 몬스터 체력바, 앞으로 나올 몬스터 스택, (일시정지-타이틀 버튼)
      • 결과 - 전투 결과, 다시하기 버튼, 타이틀 버튼, (Firebase 저장 관련)
    • 필요한 액션 정리
      • START 버튼 : 게임 시작
      • 게임 시작 : 타이틀 패널 비활성화, 배틀 패널 활성화, 전투 로직 시작
      • 적이 처치되었을 때 : 새로운 적 소환, 게임종료
      • 적 프로필이 클릭되었을 때 : 진행 일시정지, 정보 패널 보이기(DoTween, 위에서 내려오기)
      • 정보 패널 상태에서 아무 곳이나 클릭 될 때 : 패널 올린 후 일시정지 풀기
      • 종료되었을 때 : 결과값 따로 저장, 모든 상태 초기화, 결과 패널 보이기
      • RESTART 버튼 : 게임 시작
      • TITLE 버튼 : 모든 패널 비활성화 후, 타이틀 패널 보여주기
    • 스크립팅
      • CSV 데이터 읽어 매핑하기(DataIO.cs)
      • 게임 플로우와 주요 메서드 관리(GameFlowManager.cs)
      • MonoBehaviour 없이 UIManager.cs 사용 시도(잘 되었다)
      • UICanvasMap.cs 를 캔버스 프리팹에 두어 버튼과 텍스트 슬라이더 그리고 이미지 오브젝트를 미리 매핑해둔다. 이후 UIManager에서 참조하여 사용.
      • Managers.cs 를 새로 작성하여, 매니저들을 Managers에서 관리.
      • PlayerController, EnemyController 작성하여 등장연출, 공격 및 맞기 등 구현
      • ActionManager를 따로 두어 구독 형태 모아서 관리
    • 1일차 결산
      • Attack 구현하면 클리어지점까지 작동하기는 할 것 같다. 많은 디버깅 예상.
      • 한글 폰트를 하나 가져와야겠다. One Mobile 서체였던가 사용할 생각.
      • 결과 보여주는 UI를 작동하도록 해야한다. 금방 할 듯.
      • 플레이어의 애니메이션(Idle, Attack)과 적의 애니메이션(Idle, Damaged, Dead)가 작동하도록 해야한다.
      • 적 피격 시, 데미지가 몇인지 보여주는 효과를 넣고 싶다. 적 Speed 스탯에 따른 회피도 구현해야한다.
      • 적 체력바 중앙에 남은체력/전체체력 을 보여줘도 될 것 같다. 아니면 퍼센티지로.
      • 적 프로필을 띄웠을 때, 전투가 잠시 일시정지 되도록 하고 싶다. 그리고 트릭컬처럼 적 명함 안의 사진이 움직여도 괜찮을지도.
      • 전체적으로 완성도가 괜찮아졌다면 DoTween을 사용해 UI 연출에 활기를 넣고 싶다.
    반응형
    COMMENT
     
    10
    06

    탭키를 써서 변수와 주석을 정렬한 모습이지만, 세미콜론을 입력하는 등 코드 수정을 하면서 멋대로 정렬이 흐뜨러진다.

    문제는 Visual Studio의 자동 코드 정렬 및 서식 기능 때문.
    기본적으로 Visual Studio는 코드를 작성할 때 자동으로 정렬을 맞추려는 기능이 활성화되어있다.
    이를 비활성화하거나 사용자 정의 규칙을 적용해서 원하는 대로 코드를 정렬 가능하다.

    자동 서식 기능 비활성화

    1. Visual Studio 설정에서 자동 서식 기능을 조정.
      • Tools(도구) > Options(옵션)으로 이동.
      • Text Editor(텍스트 편집기) > C# > Formatting(서식) 항목으로 이동.
      • General(일반)에서 다양한 자동 서식 옵션을 볼 수 있다.
        • Automatically format on semicolon (세미콜론 시 자동 정렬) 같은 옵션을 체크 해제하면, 세미콜론을 입력할 때마다 자동으로 정렬되지 않게 할 수 있다.
    2. 주석 위치 유지:
      • Tools > Options에서 Text Editor > C# > Formatting > General에서, Ignore spaces in comments 옵션을 활성화하면 주석 위치가 자동 정렬로 인해 변경되지 않게 할 수 있다.
    반응형
    COMMENT
     
    10
    04

    현장 실습을 뭐라도 해보자라는 기세로 지원했다.

    혹시라도 최종선발까지 된다면 근처에 두 달 정도 살 곳을 구해야 하는 게 제일 어려운 점.

    반응형
    COMMENT
     
    09
    21

    해당 백준 문제는 아래와 같다.

    https://www.acmicpc.net/problem/10989

    메모리에 신경쓰지 않고 그대로 제출하려고 했던 코드는 아래와 같다.

    import sys
    def LocalInput():
        with open("input.txt") as file:
            datas = file.read().strip().splitlines()
        return datas
    def BaekjoonInput():
        datas = sys.stdin.read().strip().splitlines()
        return datas
    
    # datas = LocalInput()[1:]
    datas = BaekjoonInput()[1:]
    
    datas.sort()
    for data in datas:
        print(data)

    인풋 단계에서 메모리를 낭비하지 말자는 아이디어는 있었지만, 어떻게 하면 좋을지 모르겠고 그 외 방도도 떠오르지 않아 GPT에 물어보고, 해당 내용을 학습해보려고 한다.

    그 내용은 아래와 같다.


    메모리를 초과하는 문제는 주로 정렬 시 사용되는 메모리, 데이터 저장 방식, 또는 출력 방식에서 발생할 수 있습니다. 아래에서는 코드의 메모리 사용량을 줄이고 효율적으로 개선할 수 있는 방법을 제시하겠습니다.

    문제 분석

    • datas = sys.stdin.read().strip().splitlines(): 이 코드는 입력을 한꺼번에 메모리로 읽어와 모든 줄을 리스트로 저장합니다.
    • datas.sort(): 정렬 과정에서 추가적인 메모리 사용이 발생할 수 있습니다.
    • for data in datas: print(data): 출력할 때도 리스트의 전체 요소를 메모리에 유지한 상태에서 하나씩 출력합니다.

    개선 방향

    1. 입력 처리 방식 최적화: 한꺼번에 메모리로 읽지 않고, 줄 단위로 읽으며 즉시 처리하는 방식으로 변경합니다. 이렇게 하면 메모리 사용을 줄일 수 있습니다.
    2. 정렬을 메모리 효율적으로 수행: 메모리 사용량을 줄이기 위해 외부 정렬(external sorting)처럼 동작하게 만들거나, 파일을 사용하는 방법을 고려할 수 있습니다. 그러나 Python에서는 sorted()를 사용하여 한 줄씩 정렬하는 방식으로도 효과적으로 처리할 수 있습니다.
    3. 입력과 정렬을 동시 처리: 입력을 받을 때마다 즉시 처리하여 메모리를 덜 사용하게 합니다.

    개선된 코드 예시

    import sys
    import heapq
    
    def LocalInput():
        with open("input.txt") as file:
            datas = file.read().strip().splitlines()
        return datas
    
    def BaekjoonInput():
        return sys.stdin
    
    # 메모리 초과 방지를 위해 제너레이터를 사용하여 입력 처리
    def process_input_and_sort(input_source):
        min_heap = []
    
        # 첫 번째 줄은 개수 정보이므로 제외하고, 입력을 한 줄씩 처리
        next(input_source)
    
        # 각 줄을 힙에 추가 (메모리를 효율적으로 사용)
        for line in input_source:
            heapq.heappush(min_heap, line.strip())
    
        # 힙에서 하나씩 꺼내면서 출력 (정렬된 순서로 출력)
        while min_heap:
            print(heapq.heappop(min_heap))
    
    # main 함수 호출부
    # process_input_and_sort(LocalInput())  # 로컬 테스트용
    process_input_and_sort(BaekjoonInput())  # 백준 제출용

    개선 포인트 설명

    1. 제너레이터 사용: 입력을 한꺼번에 메모리에 로드하지 않고, sys.stdin 제너레이터를 사용하여 한 줄씩 읽어 메모리를 절약합니다.
    2. 힙 정렬 (heapq) 사용: 메모리 사용량을 줄이기 위해 힙 자료구조를 사용해 점진적으로 정렬된 데이터를 출력합니다. heapq는 파이썬 표준 라이브러리에서 제공하는 힙 자료구조로, 효율적인 메모리 사용과 정렬을 동시에 제공합니다.
    3. 지연된 출력 처리: 정렬된 데이터를 즉시 출력하여, 리스트에 모든 데이터를 담고 있지 않도록 합니다.

    추가 고려사항

    • 파일 기반 정렬: 입력 크기가 매우 클 경우, 파일 기반 외부 정렬(External Sorting) 기법을 사용할 수도 있지만, 이는 보통 경쟁 프로그래밍에서 사용하지 않는 방법입니다.
    • Python 버전 및 최적화: 최신 Python 버전에서는 메모리 관리가 조금 더 효율적일 수 있으므로, Python 3.8 이상을 사용하는 것도 고려해볼 만합니다.

    이 방법을 사용하면 메모리 사용을 최적화하여 메모리 초과 문제를 해결할 수 있습니다.


    전체적으로 생소한 내용이라 바로 학습.

    반응형
    COMMENT
     
    09
    18
    반응형
    COMMENT
     
    09
    03

    이전 글) [1인 개발자 채널] 유니티 프로빌더랑 NonConvexMeshCol 에셋을 처음 써봤다

     

    유니티 프로빌더랑 NonConvexMeshCol 에셋을 처음 써봤다 - 1인 개발자 채널

    별 이상하고 다양한 버그한테 시달리다가 5시간 훌쩍 지났다1. ProBuilder회상해보니 프로젝트 시작할때부터 고생한 게모든 프로빌더 튜토리얼에서 알려주는 'Probuilder Window' 가 안보이는것(이렇게

    arca.live

     

    기어에 토크를 조금만 세게 주려고 해도 바아로 콜라이더끼리 통과해 헛돌게 되어버린다.

    에디터 인스펙터와 프로그램 세팅 등에서 해볼 수 있는 건 다 해 본 것 같은 상황.

    그래서 예전에 지나가다 들었던 방법이 ECS(엔티티 컴포넌트 시스템).. 얘인지는 모르겠는데, 지금 아무튼 Monobehavior 방식에서 ECS로 스크립팅하여 사용하는 Unity Physics/DOTS 와 Havok물리엔진을 다시 한 번 추천받아(GPT4o), DOTS에 Havok 이 포함되어있다고 하나 어쩌나 무튼 잘 모르겠지만 더 진행한다면 이 녀석들을 이용 해 보아야겠다.

    반응형
    COMMENT
     
    08
    29

    해당하는 클래스 별로 주어진 문제들을 해결하면 진행도가 오르는 컨텐츠가 있길래 일단 Class1 문제 모두 해결

    난이도는 새싹5 ~ 브론즈2

     

    클래스 2는 브론즈3~실버2 난이도

    반응형
    COMMENT
     
    08
    17
    반응형
    COMMENT