본문 바로가기
게임 개발 일지/내일배움캠프 TIL

Array.IndexOf(x,y) / 델리게이트와 이벤트의 차이

by 빛하_ 2023. 12. 5.

 

 

 

알고리즘 코드카타

 

서울에서 김서방 찾기 / C#

 

Array.IndexOf(매개변수1, 매개변수2)

String 형태의 Array에서 Index를 찾고 싶을 때 사용한다.

매개변수1은 string Array

매개변수2는 찾고자 하는 string

반환값은 매개변수2가 위치한 index 값.

 

Unity 게임 개발 입문 
팀프로젝트 : Arkanoid24

 

 

URP (유니버설 랜더링 파이프라인)

 

https://docs.unity3d.com/kr/2019.4/Manual/com.unity.render-pipelines.universal.html

 

모바일, 고사양 콘솔, PC 등 다양한 플랫폼에서 최적화된 그래픽을 쉽고 빠르게 구현하도록 도와준다.

URP를 이용해 image, animation, camera 등을 개선할 수 있다. 

 

 

rank panel 만들기 (진행중)

 

 

rank panel의 기능은 게임 종료 시점에서 현재 점수가 5위 안에 들면 기록하는 것이다.

score.cs 는 따로 만들지 않았고, GameManager.cs 에서 들고 있기도 어렵다고 판단했다.

score를 사용하는 scene이 총 3개이고, 각 scene마다 score를 저장해야하기 때문이다.

그래서 PlayerPrefs를 중복되지 않게 관리하기 위해 각 scene의 panel에서 score를 관리하기로 했다.

 

*로직*

UI에 float 배열 타입을 선언
game over 될 때마다 배열에 현재 점수를 추가

[i] < rankscore 라면, rankscore를 playerprefs로 저장

playerprefs 배열에서 순위에 맞는 점수를 출력

 

 

이벤트와 델리게이트

 

많은 수의 트리거와 충돌 이벤트는 게임 성능을 저하시킬 수 있음.

물리 이벤트는 물리 엔진 업데이트 주기에 따라 호출되므로 Update() 메서드와는 다른 타이밍으로 실행될 수 있음.

UI Events의 경우 특히 사용자의 사용감을 고려해서 제작해야 한다.

 

델리게이트와 이벤트의 차이

 

델리게이트

특징 : 메소드를 참조하는 타입 // 메소드 참조를 변수에 저장, 다른 메소드에 전달, 메소드 호출을 동적으로 결정할 수 있음

장점 : 다양한 메소드를 변수에 할당할 수 있어서 편리함

          코드 재사용성을 높이고 컴포넌트 간 결합도를 낮춤

 

단점 : 델리게이트 사용이 과도하면 코드의 복잡성이 증가할 수 있음

          적절한 상황에 구독/해지가 일어나지 않으면 메모리 누수가 생김

 

델리게이트가 구독하고 있는 대상이 파괴 또는 삭제 되었다고 해도 계속 구독상태를 유지하고 있기 때문에

게임 내에서도 참조 요구를 계속 할 것이고, 그래서 메모리 누수가 발생하는 것.

반드시 구독과 해지에 대한 코드를 쌍으로 들고 있어야 한다.

 

 

이벤트

특징 : 델리게이트를 기반으로 명령을 내림 (상위 개념), 이벤트를 구독하는 모든 메소드를 호출할 수 있음

장점 : 캡슐화 ( 클래스 외부에서 직접 발생시킬 수 없어서 안전한 코드 관리 가능)

          컴포넌트 간 소통을 명확하게 만들 수 있음. 가독성과 유지보수성 향상

          Update 사용량을 늘리는 것보다 이벤트를 사용하는 게 메모리 측면에서 유리함

 

단점 : 이해도 요구 (이벤트 개념과 사용 방법을 이해하는 데 시간이 소요될 수 있음)

          오버헤드 (이벤트 시스템이 복잡해질수록 성능에 미치는 영향이 커진다)

 

 

 

 

오늘의 회고

 

RankPanel 개발이 생각보다 많이 어려웠다.

로직은 충분히 이해되는데, score.cs가 없어서 score 자체를 panel이 들고 있어야 하기 때문에

이것을 PlayerPrefs의 배열로 집어넣는 과정이 어려웠다.

 

유튜브, 블로그를 찾아보면서 우리 팀 개발 상황과 맞게 제작할 수 있는 방법을 찾기까지 오래 걸렸다.

score.cs가 필요한 경우가 대부분이었다.  

외국 개발자 영상을 보며 1시간 정도 따라하다가 마지막에 json을 사용하라고 해서 접은 적도 있었다. 

결국 제일 아날로그적이지만 적용하기 쉬운 방법으로 진행하게 되었다.

 

내일은 꼭 RankPanel 기능을 정상적으로 작동시키고, 

QA와 발표준비를 돕고 싶다.

 

힘들지만 꺾이지 맙시다!

 

 

 

댓글