전체 글

Unity / C#
프레임 "프레임"이라는 용어는 그래픽 렌더링과 관련된 컴퓨터 그래픽스의 기본적인 단위로서 중요한 개념이다. 간단하게 말해서, 게임 또는 어떤 동영상 콘텐츠에서 프레임은 연속적인 순간 순간의 정적인 이미지이다. 이러한 프레임들이 빠르게 연속적으로 화면에 표시될 때 우리의 눈은 이를 연속적인 움직임으로 인식하게 된다. 움직임을 가진 요소들이 프레임에 영향을 받는 이유: 1. 움직임의 일관성: 게임 내의 움직임은 프레임율에 독립적으로 일관되게 보이게 만들기 위해 `Time.deltaTime`과 같은 값을 사용한다. 예를 들어, 게임 캐릭터가 초당 5 유닛 움직여야 한다면, 이 움직임은 30fps에서도 60fps에서도 동일하게 보여야 한다. 2. 프레임 드롭과 렉: 만약 게임이 너무 많은 연산을 처리해야 하거나..
지난 번 Input Actions를 쓰면서 왜 CharacterController, PlayerInputController, Movement, AimRotation 등의 스크립트를 분리해서 관리하는지 이해하는 데 오래 걸렸다. 이번에 Enemy 개체들이 추가되면서 이런 식으로 스크립트를 분리하면 확장성이 커진다는 걸 확실히 이해했다. CharacterController를 통해 개체들의 (공통적인 로직이 적용되는) 움직임을 관리하고, PlayerInputController, EnemyController(ContactEnemyController, RangeEnemyController)가 CharacterController를 상속받아서 추가적인 특징을 반영한 움직임을 구현하는 식으로 확장되어 사용된다. Mov..
팀 프로젝트 개요 프로젝트 명 : Rescue Animals (동물 구출 대작전!) 프로젝트 소개 : 벽돌 사이에 갇힌 동물들을 구한다! 팀 프로젝트 결과물 깃허브 GitHub - szlovelee/RescueAnimals Contribute to szlovelee/RescueAnimals development by creating an account on GitHub. github.com 시연영상 프로젝트 회고 내가 맡은 부분 UI 디자인 GameManager (나중에 팀원분의 정리 덕에 갈아엎어지긴 했지만,,) 랭킹 시스템 코인 시스템 후기 UI 디자인: 너무... 적성에 잘 맞아서 어떡하나.... 웹서비스 디자인을 해 본 경험이 많이 도움되는 것 같다. 이번에 Vertical Layout Group..
알고리즘 단계가 올라갈수록 시간복잡도에서 걸리거나, 내가 고려하지 못하는 사항들이 늘어나서 알고리즘 Queue를 만들었다. (동료의 추천으로 도입된 시스템) 앞으로 막히거나 조금은 복잡하게 해결한 문제들을 다시보기 위해 알고리즘 Queue파일에 저장해둘 것. 오늘은 이번주에 막힌 경험이 있는 알고리즘 문제를 돌아보았다. ...그러고 보니 이번주는 알고리즘을 정말 많이 풀지 못했다. 팀 프로젝트 때문에 알고리즘에 집중하지 못한 것.... 반성하기 1. 기사단원의 무기 [문제] 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [어려움] 매번 문제는 주어진 조건..
이번 프로젝트에서 GameManager의 기능이 복잡해지면서 버그가 많이 생긴 것 같다. 유니티 생명주기, 이벤트의 활용, 코루틴, timeScale 조절 등이 겹치면서 원치 않는 타이밍에 동작하거나 잘못 실행되는 내용들이 많았고, 게임매니저의 역할과 관련해서 의문점이 생기기도 했다. 그래서 이번 프로젝트에서 작성한 GameManager의 내용을 다시 돌아보게 되었다. GameManager의 구조 현재 게임매니저는 GameScene의 로직을 총괄하는 역할을 하고 있다. (여기서부터 잘못된 것..) 게임 진행에서 필요한 정보를 저장하고, 스테이지 판별, 게임 종료 등의 로직을 수행한다. 생명 주기와 관련해서는 Start(), FixedUpdate()를 쓰고 있다. Start()에서 SetGame()메서드를..
과제 진행 과정에서 코루틴을 쓸 일이 많았다. 반복적인 작업을 수행하거나, UI 효과를 위해서 시간을 정지해야 할 때, 실행되어야 할 다른 내용들이 멈추면 안 되는 상황들이 있어서 사용하게 되었다. 이전에도 코루틴을 써본 적이 있지만, 자세히 파고 들어 어떻게 작동하며 어떤 구조를 가지고 있고, 어떤 점을 주의해야 하는지 명확하게 이해하지는 못해서 공부할 필요성을 느꼈다. 코루틴 (Coroutine) 코루틴은 Unity에서 제공하는 특수한 프로그래밍 구조로,일반 메서드와는 다르게 실행을 일시 중지하고 나중에 다시 재개할 수 있다. 코루틴은 IEnumerator 타입의 메서드를 통해 구현되며, 코루틴은 yield를 사용하여 이러한 중지와 재개를 한다. 주로 비동기적인 동작이나 지연된 작업을 수행할 때 유용..
팀원이 설계한 데이터 저장 구조에 내가 설계한 랭킹 시스템을 추가하면서 데이터 저장이 어떻게 이루어지는지 구체적으로 살펴볼 기회가 생겼다. 랭킹 시스템을 추가하면서 버그도 발생했는데, 이 해결 과정이 아주 스트레스풀하고... 발견된 문제가 아주 허무했기 때문에.... 저장 시스템에 대한 보다 깊은 이해가 필요할 것이라 판단했다! 저장 구조 이번 프로젝트에서 저장이 어떤 과정으로 이루어지는지 살펴보면, SaveData라는 클래스의 객체 형태로 모든 정보를 담고, 이를 직렬화 & 역직렬화 하며 데이터를 저장, 불러오기 한다. 이 저장과 불러오기 작업은 DataManager의 메서드(SavePlayer, LoadPlayerInfo)를 통해 이루어진다. 프로젝트에서 정보의 저장과 불러오기가 필요할 때, Data..
스크립터블 오브젝트(Scriptable Object)는 Unity에서 데이터를 저장하고 관리하기 위해 사용되는 특별한 타입의 클래스이다. 기본적으로, 스크립터블 오브젝트는 MonoBehaviour를 상속받지 않기 때문에 씬(Scene)에 직접적으로 배치할 수 없다. 그 대신, 프로젝트 창 내에서 애셋으로서 존재하게 된다. 스크립터블 오브젝트의 주요한 특징과 용도 1. 데이터 저장 게임 설정, 캐릭터 통계, 아이템 정보 등 게임에서 변경되지 않는 데이터를 저장하는 데 사용된다. ScriptableObject는 데이터 저장에 중점을 둔 애셋이다. 예를 들어, 게임의 모든 무기에 대한 정보를 저장하는 데 사용할 수 있다. 이렇게 하면 여러 캐릭터나 시스템에서 동일한 무기 데이터에 액세스할 수 있다. 2. 게임..
리리핸
도전기