전체 글

오늘 배운 경험을 회고하며 레벨 업 하는 곳입니다. 모르는 것은 배우고 아는 것은 베풀 수 있는 개발자로 성장하겠습니다!
· TIL/Unity
오늘 프로젝트를 진행하는 도중에 애니메이터 트리거를 String으로 파라미터 값을 계속 호출하는 상황이 반복됐다. 하지만 별 생각없이 진행하여 마무리했고 추가로 유니티 강의를 듣고있었다. 그런데 마침 강의에서 String을 호출하는 것은 성능상 좋지 않다고 하여 StringtoHash기능으로 값을 변환하여 사용하고 있었다. 그렇기에 StringtoHash에 대해 알아보고자한다. StringtoHash란? Unity에서 Animator와 같은 기능들을 사용할 때 StringtoHash 기능을 사용할 수 있다. 정수 ID를 Hash값으로 미리 캐싱하여 사용하기 때문에 String을 사용할 때의 생길 수 있는 잠재적 오류와 속도문제를 해결해 줄 수 있다. 사용법 Animator에서 공격하는 값을 Attack이..
· TIL/Unity
오늘 프로젝트 마무리로 스타트화면에서 사용자에게 이름을 입력받아 다른 씬으로 입력 값을 옮겨주는 작업을 하고 있었다. 그래서 Input Field를 만든 후 코드를 짜려고 하는데 입력을 어떻게 받아 왔는지 바로 떠오르지 않았다. 그렇기 때문에 Input Field에 대한 개념을 적어보고자 한다. Input Field란? 사용자에게 입력을 받을 수 있는 공간이다. 사진과 같이 기본형태는 흰색 네모칸으로 이루어져있다. InputField의 자식 파일들은 옅은 회색으로 사용자에게 미리 정보를 알려줄 수 있는 텍스트 Placeholder와 사용자가 적을 텍스트 Text가 있다. 사용법 UI카테고리에 들어가서 Input Field를 누르면된다. Legacy 타입과 TextMeshPro 타입이 있는데 사용자가 원하..
· TIL/Unity
내가 유니티를 이용하여 처음으로 인벤토리를 만들 때는 사각형 모양의 틀을 하나만들어서 위치를 하나하나 알맞게 조정하고 x, y값을 항시 살펴보며 작업했다. 그러다 문득 떠오른 생각이 자동으로 위치값을 맞춰주는 편리한 기능이 없을까 의문이 들었다. 시간이 지난 후 찾아보니 정말 있었기에 이 부분에 대해서 설명하고자 한다. Grid Layout이란? 자식 레이아웃 요소를 격자무늬로 위치 시키는 것이다. 이런식으로 Grid Layout틀을 만들어주고 자식요소에 Image파일을 넣어 복사한다면 격자무늬 형식으로 나타난다. 오른쪽 테두리를 넘어서면 아래쪽 첫번 째부터 다시 그려진다. 사용법 우선 나는 이미지를 Grid라는 이름으로 만들었다. 이미지 컬러의 알파 값을 0으로 설정한 뒤 투명한 색의 일정한 틀을 만들..
총알이나 화살을 사용하는 게임을 제작하다보면 그에관한 Prefab 파일들을 Instantiate로 복사하여 발사하는 과정을 거친다. 하지만 총알같은 Prefab Clone 파일들은 Destroy 처리를 해주지 않으면 파괴되지 않고 어디선가 계속 메모리를 차지하고 있다. 여기서 문제점은 Destroy 기능이 굉장히 많은 비용을 소모한다는 것이다. 그렇기 때문에 게임 성능이 저하되어 프레임 드랍이 일어날 수 있다. 그래서 이러한 문제점을 해결해줄 수 있는 방법인 오브젝트 풀링에 대해 알아보려고 한다. Object Pooling이란? 자주 사용하는 오브젝트를 오브젝트 풀에 미리 생성해놓고 사용할 때마다 생성, 삭제하는 것이 아닌 오브젝트 풀에서 빌려와서 사용하고 다 사용했다면 다시 오브젝트 풀에 값을 넣어주는..
· TIL/Unity
오늘은 캐릭터의 제어를 담당하는 클래스를 상속받는 키의 입력 제어 클래스를 만들었다. 하지만 부모의 Awake를 호출해야하는 상황이 왔는데 override 라는 개념은 알았지만 정확히 어떻게 사용해야할지 몰랐다. 그래서 이 부분에 대하여 개념을 살펴보고자 한다. 부모 클래스 Awake의 호출을 못하는 상황 현재 부모의 클래스를 상속받은 PlayerInputController 클래스가 있다. Awake에 내가 사용하고 싶은 기능들을 넣고 실행을 하면 뭔가 둘다 호출이 되면서 잘될 것같다. 하지만 상속을 받은 자식클래스에서만 Awake가 호출이되고 부모의 Awake는 호출되지 않는다. 이러한 결과로 인해 자식클래스에서 부모의 Awake를 직접 호출해줘야 한다. 해결법 우선 부모의 Awake에 virtual를..
· TIL/Unity
오늘은 캐릭터와 관련된 정보들을 어떻게 효율적으로 사용할지 고민했다. 그리하여 나온 결론은 클래스를 따로 만들어서 캐릭터터와 관련된 데이터를 선언해 놓을 클래스를 하나 제작하기로 했다. 하지만 여기서 문제가 발생했다. 다른 cs파일에서 사용을 하려고 했지만 사용이 불가능했다. 그 이유는 직렬화를 안했기 때문이다. 그래서 오늘은 직렬화의 개념을 파악하려고 한다. "직렬화" 란? 데이터 구조나 오브젝트 상태를 Unity 에디터가 저장하고 나중에 재구성할 수 있는 포멧으로 자동 변환해주는 프로세스를 말한다. 여기서 변환과정은 오브젝트를 연속된 바이트로 변환해주는 과정을 말한다. 요약하자면 객체(데이터)의 정보를 지속적으로 보존하고 사용하기 위해 일련의 변환과정을 거친다는 것이다. 사용법 이 사진은 오늘 내가 ..
· TIL/Unity
이번 팀프로젝트에서 몬스터를 소환하는 기능을 목표로 설정하고 구현했었다. 몬스터 소환은 반복되어야 했기 때문에 함수를 원하는 시간에 실행될 수 있는 지연함수 기능을 사용해야만했다. 그래서 Invoke와 Coroutine중 무엇을 써야할까 고민하다가 둘다 비슷한 기능 같아서 Invoke기능을 사용했고 결과로 반복적인 함수호출을 구현할 수 있었다. 프로젝트가 끝난 후 그냥 기능이 비슷하다고 넘어간 Invoke와Coroutine의 개념을 확실히 하고 싶어서 개념을 정리하고자 한다. Invoke 와 Coroutine은 똑같은 지연함수라고 생각할 수 있다. 그래서 둘 중 하나를 골라서 마음대로 쓰고 있을 수 있는데 둘은 개념이 다르다. 1. Invoke와 Coroutine의 개념 Invoke - 시간을 지연시키고..
· TIL/Unity
오늘 팀프로젝트를 무사히 마무리하고 팀원들과 각자 코드를 어떻게 구현했는지 공유하는 시간을 가지고 있었다. 그때 팀원 한분이 내 코드를 보고 Prefab관리를 ScriptableObject로 하면 관리가 굉장히 수월하고 효율도 좋다해서 코드 리뷰가 끝나자마자 이 기능에 대해 알아보았다. 1. ScriptableObject란? 클래스 인스턴스와는 별도로 대용량의 데이터를 관리할 수 있는 데이터 컨테이너다. 데이터를 저장하는 Prefab이 있는 경우 유용하다. 그 이유는 Prefab을 인스턴스화 할때마다 해당 데이터의 자체 사본이 생성되기 때문이다. 여기서 자체 사본이 생성되기 때문에 메모리 효율도 좋고 유용하다고 나온다. 그럼 자체 사본이 생성된다는게 무슨 말일까? 2. 내 코드와 ScriptableObj..
Sh_Blog
Sh_RPG