TIL(Today I Learned)

Unity 게임 개발 입문 : 탑다운 슈팅 프로젝트 - TIL#20

Najdorf 2024. 1. 19. 21:02
728x90

오늘의 알고리즘 문제

 

[제일 작은 수 제거하기]

문제 : 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

 

public class Solution
{
    public int[] solution(int[] arr)
    {

        if (arr.Length == 1)
        {
            int[] answer = new int[1];
            answer[0] = -1;
            return answer;
        }
        else
        {
            int[] answer = new int[arr.Length - 1];

            int minidx = 0;

            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] < arr[minidx])
                {
                    minidx = i;
                }
            }

            for (int i = 0; i < arr.Length - 1; i++)
            {
                answer[i] = arr[i];

                if (i >= minidx)
                {
                    answer[i] = arr[i + 1];
                }
            }
            return answer;
        }
    }
}

 

 


오늘 들었던 강의 메모

 

챌린지 반 OT:
100프로짜리 완벽한 코드보다는
80프로짜리 내가 고민한 코드 짜기가 목표
메모리 부분, cs를 이해해서 다룰 예정
'한 가지 대상에 대해서 핵심을 파악하고 있냐' 도 중요
Unity에선 최적화가 중요할 것
클라이언트 프로그래머한테는 리소스를 어떻게 효율적으로 다룰 지 중요


5강 입력과 캐릭터 이동

 

PPU(Pixels Per Unit) : 스프라이트의 픽셀 수와 유니티 단위 간의 관계.

'직역하면 1 유니티 단위 안에 몇 개의 픽셀이 들어가는가?' 정도. 

따라서, 숫자가 크면 클 수록 게임 뷰에서 출력되는 스프라이트 크기는 작아진다.


Input.GetAxis : InputManager에서 가져옴
* Time.deltaTime = 동일하게 이동
[SerializeField] : 직렬화. Inspector에서 수정 가능한 private 선언

 


Input System 다운 > New Folder 'Input' > New Input Action Asset 만들기
normalized = 단위 벡터화 시키기, 대각선 이동 할 때 빨라짐 방지

Vector2 newAim = value.Get<Vector2>();
Vector2 worldPos = _camera.ScreenToWorldPoint(newAim);
newAim = (worldPos - (Vector2)transform.position).normalized;
=> 스크린 포지션을 월드 포지션으로 변환

 


6강 충돌 처리와 맵 구성


충돌 : Collider Rigidbody 컴포넌트
Collider 충돌 가능하게 함
Rigidbody 물리 법칙 부여
2개의 오브젝트가 서로 충돌을 하려면?
둘다 Collider, 둘 중에 하나는 Rigidbody 갖고 있어야 함

타일맵 : 그리드 기반의 게임을 만들 수 있음
2d Obj > Tilemap > Rectengular
backDesign : 플레이어 뒤에 나오는 레이어
foreDesign : 플레이어 앞에 나오는 레이어
collision : 충돌 판정용. 알파값 0.

 


7강 조준(Aim) 시스템


Arctan : 벡터의 각도 구하기, 탄젠트의 역함수
90도가 넘어가면 돌아가게 하기 
Quaternion : .Euler 메서드는 라디안 값을 Degree로 변환

 


8강 공격 시스템 구현


Awake에서 컴포넌트 준비
Start 이후에 컴포넌트 사용


Q. >>>> 내가 이해 못하는거? Controller 스크립트의 Action, Virtual, Protected 키워드 등

 

A. Action은 Delegate(함수 포인터)의 return이 없는 간략화 된 버전이다.

return이 있으면 Func를 쓴다. 저번 TIL에서도 다뤘는데 또 까먹었다;;

 

Virtual 키워드도 클래스 상속을 배울 때 분명 다뤘지만, 까먹어서 다시 정리한다.

virtual 키워드로 부모 메서드를 재정의 할 수 있다.

 

Protected 키워드는 상속받은 자식 클래스에서만 사용할 수 있게 하는 접근제한자이다.

 

참고 글:

https://math-development-geometry.tistory.com/5

 

[ C# 접근제한자 ] public, private, internal, protected

C#에 존재하는 접근제한자는 4가지입니다. 기본값은 private입니다. 접근제한자는 클래스, 변수, enum, 함수 앞에 적어주게 되고, 선언된 접근제한자의 영향을 받습니다. 1. public public으로 선언된다

math-development-geometry.tistory.com

https://sicilian-najdorf.tistory.com/9

 

C# 기초 문법 나머지, 텍스트 RPG 게임 만들기 - TIL#8 (1)

어제는 객체 지향 프로그래밍(OOC)과 가장 중요한 개념인 객체와 클래스를 중점적으로 다뤄봤었다. 오늘은 이어서 인터페이스(Interface)에 대해서 배웠는데, 인터페이스는 USB 포트와 같이 클래스

sicilian-najdorf.tistory.com


Prefab : 붕어빵 틀
Instantiate 함수 : 붕어빵 틀에 찍어내서 양산하기



======== 심화 구현 =========

9강 스탯 만들기


MonoBehaviour 상속 해제, Update Start 등 Unity 기능 사용 해제
[Range(1, 100)] public int maxHealth; 와 같이 범위 지정 가능
Scriptable Object : Unity 데이터 저장/관리 컨테이너. Inspector에서 직접 수정 관리 가능.

[CreateAssetMenu(fileName = "DefaultAttackData", menuName = "TopDownController/Attacks/Default", order = 0)]
상단에 추가해서 메뉴 추가 가능
[Serializable] 직렬화 정도만 해놔도 Inspector에서 작업 가능하게 꾸밀 수 있음

재정의 하게 되면 protected override 키워드
그리고 내부에 base.Awake() 등의 사용으로 이후에 시행되게 할 것

 


10강 투사체 구현하기


Q. >>>> as 키워드가 정확히 뭐지?

A. 형변환 연산자이다. 보통 캐스팅할 때 '(int) 변수명'과 같은 식으로 하지만

형변환 할 수 없을 경우 예외가 발생할 수 있다.

as의 경우 형변환을 할 수 없을 때 오류 대신 null 값을 돌려준다.

 

자매품으로 'is' 키워드도 있는데,

형변환을 할 수 있는 지의 여부를 bool 형의 값으로 돌려준다.

 

참고글:

https://cs-solution.tistory.com/8

 

[C#] as, is 키워드 사용법

형식을 변환하기 위해 캐스트 연산자를 사용한다. double pi = 3.14; int p = (int)pi;// double 타입 값 3.14를 int 타입으로 캐스팅 이런 식으로 값을 다른 형식으로 변환하거나, enum FruitType { Apple, Banana, Grape,

cs-solution.tistory.com

 


느낀 점

오늘 하루 정신 없이 강의만 듣고 메모를 반복했는데,

Unity 입문인데 생각보다 난이도가 있어서 당황했다;;

 

그러나 강의 듣던 중 처음 보는 기능도 많이 나와서 알 수 있었고

C# 문법 사용에 대해 미숙했던 개념들도 보완할 수 있었다.

 

강의 듣는 속도가 많이 느리고 이러다가

개인 과제 제출까지 늦을 수도 있겠다는 생각이 들어서

주말도 시간내서 이어서 공부하기로 한다...

728x90