전체 글 (201)

  • 2024.10.08
  • 2024.10.06
  • 2024.10.04
  • 2024.09.21
  • 2024.09.18
  • 2024.09.03
  • 2024.08.29
  • 2024.08.17
  • 2024.08.05
  • 2024.08.02
  • 2024.07.26
  • 2024.07.24
  • 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
     
    08
    05

    내용을 기억할 수 있도록 하기 위해서 API로는 한계가 있기 때문에 다시 셀레니움에 착수.
    굳이 셀레니움이 아니더라도 웹브라우저를 컨트롤 할 수 있다면 상관 없지만 일단 셀레니움으로 접근 해 보자.

    이전 진행하던 프로젝트를 다시 참고하여 갈피를 잡자.

    https://ecchi.kr/429#comment23290134

     

    [ChatGPT로 AI 여자친구 만들기] 따라해보기

    https://www.youtube.com/watch?v=XPXXpIx0LCE 본 프로젝트는 정말 감사하게 위 영상에서 제시해준 로드맵을 기반으로 진행되었다. 상시숭배 할 수 밖에 없어 전체적인 흐름 01:32 ▶ 나무위키를 pdf로 저장, GPT

    ecchi.kr

     

    현재 시도하고픈 내용 중 하나는 GPT끼리의 대화가 계속 이어지도록 구현하는 것이다.
    방향을 잘 잡는다면 한 명은 개발 어시스턴트, 다른 한 명은 개발자의 포지션에서 프로젝트의 진척도를 끌어올릴 수 있지 않을까 생각이 든다.
    무척 이상적인 이야기이고 추상적인 부분이 많아 일단은 명확한 목표는 아니다.
    그리고 시도한 사람이 무척 많을 것으로 예상되는데, 이렇다 할 결과를 본 적이 없어 아무래도 한계가 크기 않을까 일단 생각한다.

    반응형

    '다이어리' 카테고리의 다른 글

    물리 프로젝트 on 유니티6  (0) 2024.09.03
    solved.ac CLASS 1 완료  (0) 2024.08.29
    메이플 캐릭터 조회 Lalainfo  (0) 2024.08.02
    POST, PUT, PATCH 사용에 대해  (0) 2024.07.23
    Python API 서버 구축 연습중  (0) 2024.07.23
    COMMENT
     
    08
    02

    이전 도중 개발을 멈췄던 사이트의 상태

    API키를 이용해 해당 계정의 캐릭터정보를 모음

    Todo

    • 여러 계정 모아보기
    • 이름 외 정보 표시

     

    8월 3일 업데이트

    배포 페이지 : https://www.lalainfo.kr/account

    Commit 내용

    드디어 뷰어로써 기능을 하게 됨. 상기의 Todo 목록 모두 구현.

    필터, 표시설정, 정렬 기능 구현.

    짧은 시연

    직업 '라라' 필터 및 표시설정 커스텀

    의도치는 않았지만, 자연스러운 캐릭터 겹치기가 되는 것을 확인했다

     

    반응형
    COMMENT
     
    07
    26

    Q.

    sha256을 통해 아이디용으로도 salt를 만들어서 아이디도 암호화하고
    로그인 체크에서 사용자와 입력한 아이디와 ID-salt를 조합하여 아이디 체크를 하도록 하여 혹여나 DB가 털릴 시에 ID도 노출되지 않도록 하고 싶은데, 연산에 많은 시간이 걸리려나?
    그리고 ID도 암호화할 시에 관리자 입장에서 난처한 상황이 많이 발생하려나?

    A.

    아이디를 해싱 및 솔트 처리하여 저장하는 방법은 보안을 크게 향상시키지만, 몇 가지 고려사항이 필요합니다. 이런 방식으로 아이디를 처리할 경우의 장단점과 고려사항을 설명하겠습니다.

    장점

    1. 보안 강화: 데이터베이스가 유출되더라도 아이디와 비밀번호가 해시 처리되어 있기 때문에 평문 아이디와 비밀번호를 알아내기 어렵습니다.
    2. 프라이버시 보호: 유저의 아이디가 노출되지 않으므로 개인정보 보호에 유리합니다.

    단점 및 고려사항

    1. 관리의 복잡성: 관리자 입장에서 사용자의 아이디를 직접 확인할 수 없으므로 문제 해결이 어려울 수 있습니다. 예를 들어, 특정 사용자를 찾거나 문제가 발생했을 때 사용자를 식별하는 데 어려움이 있습니다.
    2. 성능: 해싱 알고리즘은 비교적 빠르지만, 사용자 수가 많아질수록 로그인 처리에 시간이 조금 더 걸릴 수 있습니다. 하지만 일반적인 사용 환경에서는 크게 문제되지 않을 것입니다.
    3. 복구 불가능: 해싱된 아이디는 복구가 불가능하므로 사용자가 아이디를 잊어버리면 새로운 아이디를 생성해야 할 수 있습니다.
    반응형
    COMMENT
     
    07
    24

    바로 Connect 시도 시 에러
    해결과정 1. 옵션 펼치기
    해결과정 2. 구문 작성

    Option 열고, Additional Connection Parameters 에 아래와 같은 구문 입력 후 Connect

    TrustServerCertificate=True

    반응형
    COMMENT