TIL 0201 게임개발 숙련 개인 과제 - 1 / 알고리즘 문제

강성원·2024년 2월 3일
0

TIL 오늘 배운 것

목록 보기
29/71

오늘 공부한 내용

InputSystem -> Invoke Unity Events

강의를 들으며 기록하고자 한 내용

인풋 시스템은 평소처럼 만들어주되 Player에 컴포넌트로 붙인 Player InputBehaviorInvoke Unity Events로 설정해준다.

만든 메서드를 내가 설정한 버튼이 눌릴 때 호출할 이벤트에 등록할 수 있다.

등록한 함수로 전달되는 콜백 컨텍스트는 ReadValue메서드로 값을 읽어올 수 있다.
phase를 통해서 누름, 눌린 상태, 뗌 을 알 수 있음

카메라 룩 함수

private void CameraLook()
{
    camCurXRot += mouseDelta.y * lookSensitivity;
    camCurXRot = Mathf.Clamp(camCurXRot, minXLook, maxXLook);
    cameraContainer.localEulerAngles = new Vector3(-camCurXRot, 0, 0);

    transform.eulerAngles += new Vector3(0, mouseDelta.x * lookSensitivity, 0);
}

마우스와 카메라의 움직임은 개념이해가 중심이다.
(마우스 : Vector2 / 카메라 : Vector3)
마우스 입력의 X값이 변하면 카메라의 Y축이 회전하고, Y값이 변하면 카메라의 X축이 회전해야한다.

그라운드 체크 & Gizmos

public bool IsGrounded()
{
    Ray[] rays = new Ray[4]
    {
        new Ray(transform.position + (transform.forward * 0.2f) + (Vector3.up * 0.01f), Vector3.down),
        new Ray(transform.position + (-transform.forward * 0.2f) + (Vector3.up * 0.01f), Vector3.down),
        new Ray(transform.position + (transform.right * 0.2f) + (Vector3.up * 0.01f), Vector3.down),
        new Ray(transform.position + (-transform.right * 0.2f) + (Vector3.up * 0.01f), Vector3.down),
    };

    for (int i = 0; i < rays.Length; i++)
    {
        if (Physics.Raycast(rays[i], 0.1f, groundLayerMask))
        {
            return true;
        }
    }

    return false;
}

private void OnDrawGizmos()
{
    Gizmos.color = Color.red;
    Gizmos.DrawRay(transform.position + (transform.forward * 0.2f), Vector3.down);
    Gizmos.DrawRay(transform.position + (-transform.forward * 0.2f), Vector3.down);
    Gizmos.DrawRay(transform.position + (transform.right * 0.2f), Vector3.down);
    Gizmos.DrawRay(transform.position + (-transform.right * 0.2f), Vector3.down);
}

알고리즘

최소 직사각형 문제

제출한 코드

using System;

public class Solution {
    public int solution(int[,] sizes) {
        int answer = 0;
        
        int width = 0;
        int height = 0;
        
        for(int i = 0; i < sizes.GetLength(0); ++i)
        {
            int temp = 0;
            if(sizes[i,0] < sizes[i,1])
            {
                temp = sizes[i,0];
                sizes[i,0] = sizes[i,1];
                sizes[i,1] = temp;
            }
            
            if(width <= sizes[i,0])
                width = sizes[i,0];
            if(height <= sizes[i,1])
                height = sizes[i,1];
        }
        
        answer = width * height;
        
        return answer;
    }
}

검색해본 내용

이차원 배열의 길이를 얻어오는 방법을 알기 위해서 검색을 했고
matrix.GetLength(0 or 1)을 알게됐다.
인자로 0을 넣으면 행의 길이, 1을 넣으면 열의 길이를 가져온다.

profile
개발은삼순이발

0개의 댓글

관련 채용 정보