241228

lililllilillll·2024년 12월 27일

개발 일지

목록 보기
34/350

✅ 오늘 한 일


  • Project Etude


🎮 Project Etude


디버그 텍스트 출력

copilot이 debug 소리 듣자마자 자동완성으로 고봉밥을 만들어줬다

부검 시작

의문사 디버깅

일시정지하면서 보다보니까 판정용 플레이어가 팍 하고 튀는 프레임이 있었다.
이동 로직 때문인 거 맞는듯?

그냥 죽어서 되돌아가는 프레임을 찍었던 걸수도 있구나
isInBox가 True로 돼있는거 보니까 맞는듯

일시정지 계속 때리면서 보는데, 콜라이더에 초근접할때까지만 해도 아무일도 없다가
콜라이더에 닿는 순간 죽어버림.

죽었을 때 hitIndex를 찍어보니 둘 다 -1.
그 말은 굉장히 이상하다.
콜라이더에 닿지도 않았는데 게임 오버가 되어버렸다는 뜻.
isInBox를 누군가가 true로 바꿔버렸다는 건데...

        // 이번에 쳐야할 블럭에 진입
        if (hit1Index == missionBlockIndex || hit2Index == missionBlockIndex)
        {
            if (!isInBox)
            {
                Debug.Log("InBox");
                if (hit1Index == missionBlockIndex) missionBlockCollider = hit1.collider;
                else missionBlockCollider = hit2.collider;
                missionBlockScript = missionBlockCollider.GetComponentInParent<NoteBlock>();
                missionKeyType = missionBlockScript.requiredKeys;
                isInBox = true;
                keyInput = 0;
                EndBlockCheck();
            }
        }

누군가가 InBox를 두번이나 true로 만들어버린다.

두번째 InBox는 되돌아가면서 호출된 InBox로 보임.
이동 로직 바꾸기 전엔 멀쩡하게 작동하던 실패 판단 로직이 말썽을 일으킨다는게 뭔가 이상해서
if (AudioSettings.dspTime - lastBlockStartTime < 0) Debug.Log("음악이 되감기 되었습니다.");
이걸 넣어봤는데, 안 잡힘. 덜덜거리면서 간다고 하더라도 적어도 뒤로 가는 일은 없다는 뜻.

그런데 InBox 때는 hitIndex가 1인게 잡혔으면서
GameOver 프레임에는 hitIndex가 둘 다 -1이라는게 뭔가 이상하다.

        float newX = (float)(nowBlockPos.x + (nextBlockPos.x - nowBlockPos.x) * delta_dspTime / (missionBlockScript.noteDuration * (60f / bpm)));
        float newY = (float)(nowBlockPos.y + (nextBlockPos.y - nowBlockPos.y) * delta_dspTime / (missionBlockScript.noteDuration * (60f / bpm)));

알았다.
완전히 눈뜬 장님이었구나.

콜라이더에 닿으면 missionBlockScript가 업데이트되잖음?
근데 그걸 위치에 써버리면 콜라이더에 닿자마자 계산이 망가져버리잖음?

nowBlock 하기로 했던 건 어따 팔아먹었던 거임?

    private void player_move()
    {
        // nowBlockPos와 nextBlockPos를 포함하는 1차 함수를 만들어서, delta_dspTime에 따른 플레이어 위치를 계산
        float newX = (float)(nowBlockPos.x + (nextBlockPos.x - nowBlockPos.x) * delta_dspTime / (nowNoteDuration * (60f / bpm)));
        float newY = (float)(nowBlockPos.y + (nextBlockPos.y - nowBlockPos.y) * delta_dspTime / (nowNoteDuration * (60f / bpm)));
        transform.position = new Vector3(newX, newY, transform.position.z);
    }

고쳤다.

changeBlock() 디버깅

    void ChangeBlock()
    {
        GameObject SelectedBlock = ObjectSelector.GetComponent<ObjectSelector>().selectedObject;

        if (SelectedBlock == null)
        {
            Debug.Log("No selected block. Change failed.");
            return;
        }
        int targetIndex = SelectedBlock.GetComponent<NoteBlock>().noteBlockIndex;

        // InstantiateBlockAndStoreInformation(); // 새 블럭 생성
        // DuplicateBlockData(SelectedBlock); // 정보 복사
        UpdateBlockDataInList(targetIndex); // 리스트 정보 갱신
        // ObjectSelector.GetComponent<ObjectSelector>().selectedObject = NewBlock;

        // 선택된 블럭과 이후 블럭 모두 삭제 후 새로 생성
        WipeBlocksFromTheBlock(SelectedBlock);
        spawnPosition += GetDisplacement(NoteNameDropdown.options[NoteNameDropdown.value].text, NoteDirectionDropdown.options[NoteDirectionDropdown.value].text);
        // RegenerateBlocksFromTheIndex(NewBlock.GetComponent<NoteBlock>().noteBlockIndex);
        RegenerateBlocksFromTheIndex(targetIndex);
    }

의문사 디버깅하면서 실험하다가 편집에서 버그나길래 고침.
주석 친 부분들이 assignReference 등 문제를 일으켰다.
필요없는 부분들 날리고 리스트 정보 갱신하고 새로 만들어내는 것만 했더니 고쳐짐.

이동 로직 디버깅

이제 의문사는 안하는데, 아크로바틱을 하시기 시작하신다.

        // 경로의 계산 기준점을 노트 길이만큼 이동시킨다
        if (missionBlockScript != null)
        {
            double noteDuration = missionBlockScript.noteDuration * (60f / bpm);
            lastBlockStartTime += noteDuration;
            nowNoteDuration = (float)noteDuration;
        }

이거 아니면

    private void player_move()
    {
        // nowBlockPos와 nextBlockPos를 포함하는 1차 함수를 만들어서, delta_dspTime에 따른 플레이어 위치를 계산
        float newX = (float)(nowBlockPos.x + (nextBlockPos.x - nowBlockPos.x) * delta_dspTime / (nowNoteDuration * (60f / bpm)));
        float newY = (float)(nowBlockPos.y + (nextBlockPos.y - nowBlockPos.y) * delta_dspTime / (nowNoteDuration * (60f / bpm)));
        transform.position = new Vector3(newX, newY, transform.position.z);
    }

이거 문제일텐데

profile
너 정말 **핵심**을 찔렀어

0개의 댓글