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

강성원·2024년 2월 3일
0

TIL 오늘 배운 것

목록 보기
29/70

오늘 공부한 내용

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개의 댓글