Unity 47

네트워크 프로토콜 (IP, TCP, UDP)

네트워크 프로토콜 네트워킹에서 프로토콜은 데이터 서식 지정 및 처리를 위한 규칙 세트입니다. 네트워크 프로토콜은 컴퓨터의 공통 언어와 같습니다. 네트워크 내의 컴퓨터는 서로 다른 소포트웨어와 하드웨어를 사용하지만 프로토콜을 사용하면 서로 통신할 수 있습니다. 표준화된 프로토콜로 다른 지역의 두 사람이 언어가 다를지라도 공유하는 제 3의 언어를 사용하여 소통하는것과 유사합니다. 한 컴퓨터에서 인터넷 프로토콜(IP)를 사용하고 다른컴퓨터에서도 그 프로토콜을 사용하는 경우 통신할 수 있으나 프로토콜을 알지 못할 시 통신할 수 없습니다. IP (Internet Protocol) IP는 네트워크 계층에서 사용하는 프로토콜로, 데이터를 패킷 단위로 나누어 전송하며, 각 패킷이 목적지에 도달할 수 있도록 주소를 제공..

Unity 2025.01.07

화면을 가르는 연출

화면을 가르는듯한 연출은 게임을 하다보면 많이 찾아볼 수 있다. 그런 이펙트를 만들기 위해선 어떻게 해야할까? 1. UI 캔버스를 이용한다. 캔버스를 이용해서 가운데 이미지로 선을 그리고 애니메이션을 이용해 원하는 이펙트를 만들어 낼 수 있다. 무엇보다 제일 많이 만져본 것으로 익숙하기도 하다. 2. 셰이더를 이용한다. GPU에서 직접 연산을 통해 화면을 분할하거나 특수 효과를 적용한다. GPU 메모리를 사용하기 때문에 고사양 디바이스에서는 매우 효율적이다. 우리 게임은 PC를 노리고 있기 때문에 GPU를 사용하는 셰이더를 활용해보기로 결정했다. 3. 포스트 프로세싱을 이용한다. 마찬가지로 GPU에 의존하며 고샤양 디바이스에 적합하지만 다양한 연출과 다른 포스트 프로세싱 효과들과 결합가능하고 특히 3D에..

Unity 2025.01.03

유니티에서의 벡터

벡터(Vector)는 크기와 방향을 가지는 값을 말한다. 유니티에서는 이 벡터를 통해 3D 공간상의 한 '점'을 나타내기도하고, 물리력을 나타내기도한다. 벡터의 연산덧셈 두 벡터를 더하면 그 결과는 각 벡터를 하나씩 차례대로 취한것과 동일합니다. 두 파라미터의 순서가 바뀌어도 결과는 같습니다.뺄셈 뺄셈은 지점과 지점 사이를 알 수 있습니다. 한 오브젝트에서 다른 오브젝트까지의 거리와 방향을 구할 수 있습니다.내적 내적연산은 두 벡터를 받아 스칼라값을 반환합니다. 이는 첫번째 벡터가 두번째 벡터의 방향으로 얼마나 기울었는지를 나타냅니다.   유니티에서는 Vector3.Dot을 통해 내적을 계산할 수 있으며 예시는 다음과 같습니다.using UnityEngine;public class DotProductEx..

Unity 2024.12.31

캐스팅 vs GetComponent

캐스팅하는 연산자에는 is와 as가 있다. 1. is is 연산자는 객체가 특정 타입인지 검사하고, 같은 타입이거나 해당 타입에서 파생된 경우 true를 반환.만일 명시적으로 객체를 선언할경우 해당 객체를 해당 타입으로써 해당 조건문 내에서 사용할 수 있다. 동작로직객체의 타입 핸들 조회모든 객체에는 "타입 핸들"이 있다. 이 타입핸들은 객체의 메타데이터를 참조한다.코드를 실행하면 런타임은 메타데이터를 메모리로 로드한 다음 참조하여 해당 코드의 클래스, 멤버, 상속 등에 대한 정보를 검색한다.타입 비교is 연산자는 대상 객체의 타입 핸들과 비교하려는 타입의 핸들을 확인.타입간의 상속관계 또는 인터페이스 구현여부 확인결과 판환타입이 일치하거나 파생 타입인 경우 true, 그렇지 않으면 false를 반환 2..

Unity 2024.12.30

Unity 최적화 기초

최적화란 게임성능을 개선하기 위해 불필요한 연산이나 자원낭비를 줄이는 과정이다. 1. Update 함수 최적화.Update함수는 비워놓는다 하더라도 해당 Update를 찾는 과정이 있기때문에 그 자체로 성능에 부하를 준다. 쓰지 않는 Update는 없애자. 2. Canvas의 UpdateUI를 Update문에서 변경을해주면 해당 캔버스 전체를 매 프레임마다 그려야한다. 따라서 UI에서의 Update는 특히 더 사용하면 안된다. 너무 필요하면 최대한 덜 사용하는 방법을 찾아보자. (델리케이트, 이벤트, 코루틴 등) 3. 가비지 콜렉터의 최소화GC가 많으면 곧 프레임 드랍으로 이어진다.- 문자열 연산이나 박싱 등은 메모리 할당을 많이 발생시키므로 주의해야한다.풀링을 사용해 자주 파괴되는 객체는 미리 만들어 ..

Unity 2024.12.26

world space와 local space

월드스페이스 (World Space)월드 좌표계에서의 위치, 회전, 크기를 나타냅니다.세계좌표 0, 0, 0을 기준으로 결정됩니다.독립적으로 동작하므로, 부모오브젝트의 위치나 회전에 영향을 받지 않습니다. 로컬 스페이스 (Local Space)부모 오브젝트의 좌표계를 기준으로 위치, 회전, 크기를 나타냅니다.부모가 회전하거나 이동하면, 자식 오브젝트도 이에 따라 상대적인 위치가 유지됩니다.

Unity 2024.12.23

유니티 직렬화

유니티의 정보를 문자열로 바꾸어 이를 저장하는 행위를 직렬화라고한다.직렬화 되어진 정보를 다시 유니티 내로 불러오는 작업을 역직렬화라고한다.우리는 이를 통해 데이터를 저장/불러오기를 하거나, 데이터시트를 게임데이터베이스로 받아와 기획자가 작업할 수 있게 도와준다. CSV와 JSON은 그 대표적인 예시이다. CSVCSV는 데이터를 쉼표로 구분하여 저장하는 형식입니다. 간단하고 가벼우며 엑셀, 스프레드시트 등으로 쉽게 편집할 수 있습니다. 다만 이를 역직렬화 하는 과정에서 중첩 구조나 복잡한 데이터를 표현하기 어렵습니다. 또한 데이터 타입 정보가 없기 때문에 데이터를 읽는 쪽에서 별도의 처리가 필요합니다. JSONJSON은 데이터를 구조화하여 저장하기 위한 경량 데이터 교환 형식입니다. 키-값 쌍과 배열을 ..

Unity 2024.12.20

로딩화면 만들기

해당 로딩 화면을 만들기 위해 겉모습을 만들었다. 1. 애니메이션 클립을 추가하여 포탈이 열리는 느낌을 주도록 하자.애니메이션은 단순히 작아졌다가 커지게끔만 조절하였다. 2. 비동기 로딩이므로 로딩 진행정도 값을 받아 아래 로딩 진행 이미지의 fillAmount에 넣어줌으로써 시각화한다. 3. 로딩이 끝나면 애니메이터의 load_end 트리거를 발동시켜서 loadingEnd 클립을 발동시킨다.loadingEnd 클립은 가운데 포탈이 커지면서 Canvas Group의 알파값을 낮추어 포탈을 타는것 같은 느낌을 주고 마지막에 이벤트로 비활성화시킨다.

Unity 2024.12.19

프로젝트 중간 트러블 슈팅

첫번째 : 아이템 데이터 주고받기 문제 발생 : 상점과 인벤토리 사이에서 아이템 데이터를 전달할 때, 아이템 정보와 개수를 함께 전달해야 함.원인 분석 : 이벤트 버스의 매개변수로 object를 사용하기 때문에 단일 객체로 전달해야 함판단 및 조치 : 아이템 정보와 개수를 포함하는 ItemEventData라는 Wrapper클래스 생성.ItemEventData객체를 통해 데이터를 주고받음으로써 이벤트 버스의 매개변수 제약을 해결 문제 발생 : Wrapper 객체를 매번 new 키워드로 생성할 경우, 불필요한 가비지가 많이 쌓여 메모리 관리에 부하를 줄 수 있음.판단 및 조치 : 풀링기법 사용이벤트를 보낼 때 ItemFactory에서 래핑 이후 이를 이벤트버스에 publish, 그 이후 Wrapper를 재활..

Unity 2024.12.18

지양해야할 함수 Find와 GetComponent

Find계열 함수Unity에서 게임오브젝트를 이름 (string)으로 찾는 메서드이다.씬 내의 모든 게임오브젝트를 순회하며 string을 비교하는 메서드이기 때문에 성능저하를 불러 일으킬 수 있고, string이기 때문에 부정확하다.해당 씬 내에 특정한 이름의 오브젝트가 존재해야만 하기에 의존도가 증가한다. GetComponent유니티에서 코드를 작성하다보면 필요한 함수이지만 연산의 비용이 비싼편이다. 따라서 특히 Update에서의 GetComponent는 사양하는것이 좋다.

Unity 2024.12.17