최종프로젝트 8일차

박희태·2024년 3월 15일
0

최종프로젝트

목록 보기
7/17

알고리즘

오늘의 알고리즘문제이다.

  1. 최소 직사각형
using System;

public class Solution {
    public int solution(int[,] sizes) {
        int answer = 0;
        int max1 = 0;
        int max2 = 0;
        
        for(int i = 0; i < sizes.GetLength(0); i++){
            max1 = Math.Max(max1, Math.Max(sizes[i, 0], sizes[i, 1]));
            max2 = Math.Max(max2, Math.Min(sizes[i, 0], sizes[i, 1]));
        }
        answer = max1 * max2;
        
        return answer;
    }
}

풀이 : 먼저 가로길이와 세로길이중 최대값을 저장할 max1,2를 선언한다. 그리고 배열 sizes를 돌면서 가로, 세로 길이를 비교하고 최대값을 찾아서 저장한다. 반복문을 끝까지 돌게되면 max1은 가로길이중 가장 큰 값이 되고, max2는 세로길이중 가장 큰 값이 된다. 마지막으로 두값을 곱해 가장작은 지갑크기를 계산하고 이를 answer에 저장한다.

기술면접

  1. 박싱과 언박싱에 대하여 설명해주세요.
    (꼬리질문) 박싱, 언박싱을 사용할 때 주의해야 할 점이 있다면 무엇이 있나요?

박싱은 값 형식 데이터를 참조 형식으로 변환하는것이고
언박싱은 반대로 참조형식 데이터를 값 형식으로 변환하는것이다.
이때 주의해야할 점은
참조형식을 값형식으로 바꾸는 것이 무조건 언박싱은 아니라는 것이다. 언박싱은 박싱된 데이터를 다시 값형식으로 돌려놓는 것이기때문에 박싱이 있어야 언박싱이 가능하다.

최종 프로젝트

오늘은 플레이어의 점프부분을 고쳤다.
원래코드는

Physics2D.OverlapCircle(_floorCheck.position, 0.7f, _floorLayer);

를 사용하여 플레이어의 발 아래부분에 원을생성해 그 범위안에 바닥이있으면 점프하게 제작을 했었다. 그러나 천장이 낮아 플레이어가 높게점프하지못하고 바로바닥으로 떨어지면 낮은확률로 2단점프가되는 상황이 발생하여 Raycast를 사용하는것으로 변경하였다.
유니티강의에서 사용했던 Physics를 사용하여 제작을 하였는데 강의는 3D였고 내가제작하는것은 2D였다는것을 깜빡한나머지 Physics2D로 변환하지않아 Raycast가 제대로 동작하지않았었다...(이것을 너무늦게발견해버렸다.)
그래서 기존에 작성했던코드를 전부 갈아엎고 새롭게 코드를 작성하였다.

public void JumpStarted(InputAction.CallbackContext context)
    {
        if (_coyoteTimeCount > 0f)
        {
            _rigidbd.velocity = new Vector2(_rigidbd.velocity.x, _jumpingPower);
        }
    }

    public void JumpCanceled(InputAction.CallbackContext context)
    {
        if (_rigidbd.velocity.y > 0f)
        {
            _rigidbd.velocity = new Vector2(_rigidbd.velocity.x, _rigidbd.velocity.y * 0.6f);

            _coyoteTimeCount = 0f;
        }
    }

    //점프체크
    private bool IsFloor()
    {
        //Ray발사
        for (int i = -1; i < 2; i++)
        {
            if (Physics2D.Raycast(transform.position + (Vector3.right * 0.5f * i), Vector2.down, 0.1f, _floorLayer))
            {
                return true;
            }
        }
        return false;
    }

이제 남은부분은 점프버퍼와 머리가 천장에 부딪혔을때 일정부분 이내라면 부드럽게 밀려올라가도록 제작을 하는것이다.
먼저 머리가 천장에 부딪혔는지 확인하는코드를 작성해두었다.

//머리 충돌처리 정상작동
    //이제 부드럽게 밀려나서 점프되도록 제작
    private bool IsHead()
    {
        //레이 발사
        for(int i = -2; i < 3; i++)
        {
            if(Physics2D.Raycast(transform.position + (Vector3.right * 0.25f * i), Vector2.up, 1.1f, _floorLayer))
            {
                Debug.Log("Head Hit!!");
                return true;
            }
        }
        return false;
    }

주말동안 제작하고 확인해봐야하는것들이 남아있어서 주말에 틈틈히작업을할것같다.

profile
초보개발자

0개의 댓글