728x90
반응형

Game Development, 게임개발/개발 98

C#에서의 값 형식, 참조 형식, 박싱(Boxing), 언박싱(Unboxing) [Unity]

C#에는 2가지 데이터 형식이 존재한다. 중요하다고 볼 수 있는 점은 대입 연산자 과정에 있다. 더욱이 복사 연산이 될 때다. 이 차이점은 이들 형식이 복사되는 방식에 따라 나뉘게 된다. 값형식의 데이터는 항상 값으로 복사되지만, 참조형식 데이터는 항상 참조로 복사된다. 알아보자 참고로 값 형식은 얕은 복사(Shallow) 참조 형식은 깊은 복사(Deep) 기본 제공 데이터 형식 중 하나 또는 사용자 정의 구조체를 사용하여 선언된 변수는 값 형식을 가진다. ** 예외적으로 string 타입은 참조 형식이다. 기본 제공 타입은 이정도? bool, char, byte, decimal, double, enum, float, int long, short, sbyte, struct, uint, ulong, ush..

C#에서의 Func, Action [Unity]

메서드와 Action이 같을까? 한 번쯤 Action을 써봤을 수도 있다. 그렇다면 Action을 쓰면 메서드가 실행되는 것을 안다. 하지만 메서드와 실행방식이 다르다. 등록의 과정이 필요하다. 또한 Func이나 Action은 일반 메서드가 아닌 무명메서드도 등록이 된다. ???흠.. 무명메서드가 되는 이유가 무엇일까?? 사실 무명 메서드를 사용하기 위헤서는 델리게이트 변수가 있어야하고 델리게이트 타입의 변수를 선언해야한다. 그렇다면 각기 다른 타입의 무명 메서드를 여러개 만들 때는 어떻게 해야할까? 당연히 무명 메소드마다 그 타입에 맞는 델리게이트 타입과 변수를 따로 따로 선언해야 할 것이다. 하지만 비효율적인 작업이기 때문에 C#에서는 Func과 Action이라는 델리게이트를 제공한다. Func와 A..

아이템 인벤토리 확장 기능 구현하기

우리가 유니티에서 Inspector창으로 더 자세히 보듯이 아이템도 더 자세히 보고싶으면 어떻게 해야할까? 자세한 설명은 생략되어있음을 알고 읽자. 우선 필요한 것이 있다. 1. 내가 보고싶은 아이템 2. 해당 아이템에 대한 정보(스프라이트 등) 어떠한 로직으로 수행할 것이냐하면?? 1. 아이템 선택 2. 선택한 아이템에 대한 정보를 가져옴 3. Inspector창에 선택한 아이템을 띄움 **** 4. 해당 아이템을 회전시켜서 다른 각도에서 바라볼 수 있음 **** 시작해보자 우선 어떻게 아이템의 정보를 가지고 있을 것이냐..?에 대해서다. 나는 이번엔 Scriptable Object를 이용해서 아이템의 정보를 가지고 있을 것이다. public class ItemSO : ScriptableObject {..

휴대용 디바이스에서의 렌더링,Redering 조절로 배터리 소모 낮추기(OnDemandRendering)

전원이 연결되어 있는 PC에서는 상관이 없지만 특히 모바일에서 배터리 소모는 정말 큰 문제다. 배터리가 빨리 닳아버리면 게임을 못하기 때문이다. 그러면 게임 접속시간이 줄어들고 배터리가 빨리 닳게 되면 게임을 삭제한다. 라는 비약이 심했지만 어쨌든 중요한 요소 중 하나이다. 하지만 프레임을 낮춰서 Rendering 빈도를 낮추는 것은 도움이 전혀 되질 않는다. 게이머의 환경이 안좋아지기 때문이다. 즉, 우리는 게이머가 불편함을 느끼지 않게 하면서도 배터리를 줄일 수 있는 방법을 찾아야 한다. 그것이 바로 OnDemandRendering이다. https://docs.unity3d.com/ScriptReference/Rendering.OnDemandRendering.html 이해하기 위해서 먼저 알고 가야하..

Unity IAP, In-App Purchase, 유니티 인앱결제

Unity 는 언제부턴가 Codeless한 툴을 제공하기 시작했다. 하지만 어차피 스크립트 구현부분을 만들어야 하기에 나는 그것을 버리고 했다. 나는 스크립트로 만들어진 공개된 코드를 찾고자 했으나.. 못찾음 알아보도록 하자 하지만 몇가지는 찾았고 내 식으로 설명하려고 했다. ** 주석을 읽으면 다 이해된다. 우선 IAP에 대해 안다고 치고.. 스크립트 작성에 대해서만 알아보자 using System; using UnityEngine; using UnityEngine.Purchasing; //IStoreLinster는 구매와 관련된 이벤트를 관리함. public class IAPManager : MonoBehaviour, IStoreListener { public static IAPManager inst..

유니티 빌드 설정에 대한 고찰, Unity Build Setting

일반적으로 Android를 플랫폼으로 잡고 빌드한다고 가정하고 시작해보자. 짧게 말하면 APK를 만들어내는 행동이 바로 빌드이다. 알아보자 1. APK와 AAB 우선 옛날부터 나는 아이폰 유저지만.. 안드로이드 폰을 보면 모바일 게임 크랙판을 쓰는 친구들이 많았다. 특히 중학생 때.. 엄청 많았다. 그럴 때마다 친구들이 하는 말.. APK 파일을 보내달라 내 폰에 직접 넣게 라는 말이었다. 하지만 2021년 8월 구글은 APK 파일을 구글 플레이 스토어에 올리지 못하게 하였다. 기존의 올렸던 앱들은 유지하되 새로 올라오는 컨텐츠는 AAB 확장자로만 올려야 한다는 말이다. 그렇다면 APK는 익숙하고 AAB는 뭘까?? 제일 좋은 그림이 구글에 있어서 가져왔다. 그림을 살펴보자.. AAB에서 APK로 변환될 ..

String과 StringBuilder의 차이, 용도 [Unity]

우리는 문자열이라면 무심코 String을 쓴다. 그게 잘못되었다는 말이 아니다. 다만 게임이라는 볼륨이 큰 작업에 있어서는 최적화 작업 중 하나가 될 수 있다는 것이다. ??? 어떻게 하는데??? 알아보자 우선 string 클래스가 있어서 우리는 문자열을 쓸 수 있다는 것을 안다. 하지만 StringBuilder 클래스도 있는데.. 왜 이것이 최적화가 된다는 말인가??? -> 물론 모든 곳에서 쓰이는 곳이 아니다. -> 프로그래밍에서 무조건 좋은 방법이란 없다. Trade-off 라는 것을 명심하자. 예를 들어보자. 캐릭터가 살고 있는 주소를 표현한다고 하자. //용산역에 살고 있다면..? string myAddress = "서울시" + "용산구" + "뭔동"; 아무튼.. 저기서 문자열이 합쳐질 때 우리..

게임 오브젝트의 2가지 충돌, OnTriggerXXX, OnCollisionXXX [Unity]

유니티에서는 게임 오브젝트의 충돌의 종류에는 일반적으로 2가지가 있다. 충돌 종류에 따라 실행되는 콜백함수가 다르다. 일반적으로 최초의 충돌이 일어났을 때는 OnTriggerEnter, OnCollisionEnter 둘 중 하나의 함수가 실행될 것이다. (충돌 이벤트 메서드(함수)) ** 이 함수가 메시지를 받았기 때문에 실행되는 것인데..? 한 번 알아보자 일반적으로 Start()나 Update() 메서드가 자동으로 실행되는 이유는 Start, Update 메시지를 받아서 해당 함수를 실행하기 때문이다. 즉, 충돌 메시지에 대응하려면 충돌 메시지와 같은 이름으로 메서드를 작성하면 된다는 말이다. 하지만 일반적으로 충돌 메시지에는 메서드 이름뿐만 아니라 충돌한 오브젝트에 대한 정보도 같이 들어간다. A와..

Nullable Type 이용하기 [Unity]

널러블..?? Nullable? null + able?? null 이 가능하다고..? 뭐지?? 알아보자 매우 유용한 기능 중 하나로 예를 들자면 사용방법이다. int? num; //1, 선언 int? a = null;//2. 할당 -> int 형 변수인 a에 null 값을 할당함. 이게 도대체 어디에 이용되느냐? 바로 null check다. 실제로 바로 사용되지 않는 변수를 선언할 때 초기화를 해야하는데 int형 같은 경우에는 일반적으로 null값이 들어가지 않아 거의 사용되지 않는 값을 집어넣는게 대부분이다.(ex. minValue) 하지만 null을 집어넣어서 실제로 사용되지 않으면 null 값으로 남아있어 좋다. nullCheck는 아래처럼 이용한다. **HasValue이용 -> 기억하자. 1. H..

Unity에게 MonoBehaviour란..? [Unity]

유니티에서 New Sciript로 뭐만 만들면 항상 기본적으로 상속되는 클래스 중 하나인데 뭐하는 애일까?? 알아보자 MonoBehaviour 클래스는 유니티에서 미리 만들어져서 제공되며 컴포넌트에 필요한 기본 기능을 제공한다. 줄여서 말하자면 MonoBehaviour에는 컴포넌트에 필요한 필수 기능들이 들어가있다. 다시 말하면 MonoBehaviour를 상속받아야만 컴포넌트 기능을 쓸 수 있는 것이다. **유니티의 모든 컴포넌트는 MonoBehaviour를 상속한다. 컴포넌트를 이해하기 위해 컴포넌트 패턴이 어떻게 작동하는 지를 알아보자. 컴포넌트들은 서로 관심이 없다. -> 어떤 컴포넌트는 다른 컴포넌트에 의해서 "의도하고 찾아내기"전 까지 알 수가 없다. 마찬가지로 유니티 엔진에서도 해당 컴포넌트가..

728x90
반응형