오늘의 알고리즘 문제
[제일 작은 수 제거하기]
문제 : 정수를 저장한 배열, 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
https://sicilian-najdorf.tistory.com/9
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
느낀 점
오늘 하루 정신 없이 강의만 듣고 메모를 반복했는데,
Unity 입문인데 생각보다 난이도가 있어서 당황했다;;
그러나 강의 듣던 중 처음 보는 기능도 많이 나와서 알 수 있었고
C# 문법 사용에 대해 미숙했던 개념들도 보완할 수 있었다.
강의 듣는 속도가 많이 느리고 이러다가
개인 과제 제출까지 늦을 수도 있겠다는 생각이 들어서
주말도 시간내서 이어서 공부하기로 한다...
'TIL(Today I Learned)' 카테고리의 다른 글
개인과제 : Unity로 메타버스 환경 카피하기 - TIL#22 (0) | 2024.01.23 |
---|---|
객체 지향 프로그래밍, Unity 개인 과제 - TIL#21 (0) | 2024.01.22 |
Unity 입문하기, 세팅과 기본 조작 - TIL#19 (0) | 2024.01.18 |
텍스트 RPG 게임 : 팀 프로젝트 발표 - TIL#18 (0) | 2024.01.17 |
텍스트 RPG 게임 : 완성과 마무리 - TIL#17 (0) | 2024.01.16 |