전체 글 149

2024 12 23 TIL

중간 발표 종료 피드백 받은 내용 :  1.유저입장에서 어떤 게임을 할지 생각하여 설계- 게임에 컨셉에맞게 스토리 진행을 이어나가는 것을 만들어보는 것이 좋다. 2. 멀티플레이 게임 같은 경우 면접관들이 게임을 직접 플레이하기가 어렵다.면접관들에게 어필할 수 있는 것을 리드미로 작성해놓는 것이 중요하다.- 리드미에서 보여줄 수 있는 것을 소개영상,기술 스택, 플레이 방식 등으로표현해준다. 3. 유저 친화적으로 설계를 하는 것이 중요 현재 너무 개발적으로만 설계되어 있다. 피드백을 받은 내용을 토대로 준비할 것:1.비주얼적인 파트 :  사운드,오브젝트를 적절한 에셋으로 대체 ,UI 개선, 맵 , 스카이박스 2.코드 : 사운드 매니저 , 메인퍼즐 ->2번 퍼즐->3번 퍼즐 ,  인벤토리 시스템 오류 수정, ..

2024 12 20 TIL

기술 면접 예상 질문을 준비하면서 정리한 내용들을 위주로 오늘 TIL을 작성한다.  스택과 힙의 차이 스택 스택은 정적으로 메모리를 할당받으며 처리가 빠르지만 메모리의 할당에 제한이 있습니다.스택에 할당한 메모리는 블록이 끝나면 자동으로 스택에서 빠져나갑니다. (자동으로 메모리 관리)지역변수와 매개변수가 이에 해당하는 예시입니다. 힙힙은 동적으로 메모리를 할당할 때 쓰입니다. 스택에서 처리하기 힘든 크기를 메모리를 다루기 위해 사용됩니다. 런타임 중 할당되는 메모리는 힙에 할당됩니다.가비지 컬렉터가 지원되지 않는 툴들은 프로그래머가 직접 할당을 해제해주어야 합니다. (메모리 누수 방지) C#에서는 가비지 컬렉터라는 기능이 있어 자동으로 힙의 메모리를 정리하여 주지만가비지 컬렉터의 정리는 완벽하진 않으며 ..

2024 12 19 TIL

시연 영상을 찍기 위해서 빌드를 하는 과정에서 발생한 오류이다.  C#을 사용하고 있는 유니티에서 C++ 에 관한 오류가 발생하는 것이 의아했는데알고보니 IL2CPP 라는 것이 C++로 변환하는 중간 언어라고 한다. 스크립트 내의 C# 코드를 C++코드로 전환하고 플랫폼용 네이티브 바이너리 파일(.EXE,APK 등) 을생성한다고 유니티 공식문서에서 이야기하고 있는데 네이티브 바이너리 파일이 무엇인지 왜 C# 코드를 C++로 변환하는 과정이 필요한지를 이후 시간날 때 알아보면 좋을 것 같다. 아무튼 이 문제의 해결방법은 VisualStudio의 수정 기능에서 C++ 을 통한 게임개발 항목들을 받아주는 것이었는데명시되어 있는 바로는 언리얼 엔진에 쓰이는 툴이라고만 쓰여있어서 이것도 왜 해결방안이 되었는지 알..

2024 12 18 TIL

현재 계획상 내일까지 한사이클을 완성시켜야한다. 나머지 부분들은 완료가 되었고 내가 맡은 퍼즐쪽만 남아있다. 현재 계획상 교수쪽 정보 -> 대학원생 쪽 상호작용 -> 퍼즐 클리어 -> 보상 아이템 -> 다음 퍼즐 해금으로한 사이클을 계획해놓은 상태이다. 현재 겪고있는 문제는 오브젝트에 붙인 SO끼리 서로 같은 데이터로 인식을 못하는 상황이었다.  IEnumerator ScanEmblem() { Collider[] colliders = Physics.OverlapSphere(transform.position, radius); foreach(Collider collider in colliders) { if(!collider.CompareTag("Player"))contin..

2024 12 17 TIL

오늘 주활동은 그동안 미뤄왔던 퍼즐에서 개선할 부분을 리팩토링해보는 활동이었습니다.첫 번째 퍼즐이라고 하여도 난이도가 너무 쉬운 퍼즐이라 중간 발표가 좀 많이 걱정되긴합니다.(퍼즐을 표현하는 방법도 디버그 목적으로 간단하게만 해놓아서..)첫 사이클 이후 점점 살을 붙여나가는 것이 목표긴하나 미리 틀을 더 잘 만들어놓아야 후속 퍼즐을 만들 때도 좀 더 좋은 결과물이 나오지 않을까 싶어좀 많이 변형시켜본 것 같습니다.그렇다고 해도 당장 다음주가 중간발표니 오늘까지는 작업을 마치고 합치는 것에 집중해야할 시간입니다.첫 사이클 우선 만들고 중간발표후 고쳐나갈 부분을 고치면서 배우는 게 이번주의 가장 큰 목표인 것 같습니다. 솔직하게 적자면 배운 개념들이라도 많이 써보지 않은 부분들이 많아 헤매는 곳이 많은 것 ..

2024 12 16 TIL

캔버스를 삭제하여야하는 상황이 발생하여 코드를 작성하다. 캔버스 컴포넌트만 삭제하여 이런 오류가 발생하였다.(게임 오브젝트를 삭제해야하는데 캔버스 컴포넌트만 삭제해버린..) 캔버스에 달려있던 CanvasScaler 와 GraphicRaycaster가 캔버스가 제거되는 것을 막았다는 것인데 왜 이런 문제가 발생하나그것은 두 컴포넌트가 Canvas 컴포넌트에 의존성을 가지고 있어서라고 한다. CanvasScaler : 캔버스의 크기를 해상도에 맞게 조절하는 기능의 컴포넌트GraphicRaycaster : UI 요소들이 상호작용(클릭이나 터치 등)되는 이벤트를 처리하는 컴포넌트 이 둘은 캔버스 없이는 사용이 불가능한 컴포넌트들이다.따라서 유니티에서 두 컴포넌트가 삭제되기 전에 Canvas 컴포넌트가 삭제되는 ..

2024 12 15 TIL

프로젝트 진행 중 대부분의 데이터를 스크립터블 오브젝트를 사용하고 있는데  마침 유니티 코리아 공식채널에서 스크립터블 오브젝트를 다루는 것을 보아 시청하였다. 스크립터블 오브젝트란 스크립터블 오브젝트는 데이터 컨테이너이다.  특징-데이터만 저장할 수 있다. -MonoBehaviour 처럼 스크립트로 부착시키는 형태가 아니다.(따라서 사용할 때는 MonoBehaviour 에서 참조하는 식으로 데이터를 꺼내 써야함)(함수를 선언할 수는 있으나 static 처럼 사용이 가능) -여러씬에서 동일한 데이터에 액세스 가능하도록 설계되었다. -Asset 으로 저장되기에 외부에서도 유지가 된다. 스크립터블 오브젝트를 왜 쓰는가?  디자인 패턴 중엔 플라이웨이트 패턴(Flyweight Pattern) 이라는 것이 있다...

2024 12 13 TIL

DataManager의 기능은 게임의 전반적인 데이터를 관리하는 역할을 한다면 게임시작시 리소스에 있는 외부데이터(스크립터블 오브젝트, Json)을 불러와서 관리를 해주는 역할이 되어야할 것 같습니다. 해당 기능은 게임의 저장기능이있다면 사용되겠지만 리소스를 불러오는 것에는 적합하지 않았습니다.  public void Save(DataType type, T file){ string fileData = JsonUtility.ToJson(file, true); string path = Path.Combine(Application.persistentDataPath + $"/JsonData/{type}", $"{typeof(T).Name}.json"); File.WriteAllText(path,..

2024 12 12 TIL

이번 주 모의 면접 준비 하면서 Update 함수 : 유니티 생명주기 함수중 일정한 주기로 반복 호출되는 함수를 뜻합니다. Update : 가장 기본적인 Update 함수.  프레임 단위로 호출되기에 주기가 일정하지 않습니다. LateUpdate : Update 가 완전히 끝나고 나서 호출되는 Update 함수.마찬가지로 프레임 단위로 호출되기에 주기가 일정하지 않습니다. 프레임 내 다른 Update 함수들이 모두 호출이 끝나고 나서호출되기에 카메라 조작과 같은 곳에 자주 쓰입니다. FixedUpdate : 다른 Update 와 달리 일정한 주기를 가진 Update 함수. 그렇기에 정확한 계산이 필요한 물리연산과 같은 곳에 자주 쓰입니다.프레임과 별개로 호출되기에 프레임 내에서는 아예 출력이 안되거나 여..

2024 12 11 TIL

Resource Manager 는 내부 데이터(프리팹,스프라이트 등) 를 관리하는 역할Data Manager는 외부 데이터(Json,Csv 등) 관리하는 역할UIManager 는 UI를 리소스에서 불러오고 관리하는 역할 매니저를 만들고 관리하는 역할이 어떤 느낌인지 조금은 알것같다.프로젝트 시작 초기에 이걸 잡아놓았다면 지금 고생하진 않았을텐데뭔가 물어보고 싶은 것은 많지만 개념정립이 안된 느낌이라일단 자료를 찾아보면서 연구해보는 수 밖에 없는 것 같다.그래도 부족한 부분은 특강 녹화본을 보면서 계속 만들어보고 있다.  public class UIManager : MonoSingleton{ //현재 해상도// private float ScreenSizeX = 1920; private f..