728x90
반응형

unity 77

Convert 그리고 Parse의 문화권 문제 [C#]

JSON 파일로 데이터를 받아오는 경우도 있지만 문자열로 데이터를 받아오는 경우도 있는데 최근에 문제가 생겼었다. 바로 C#에서의 parse 문제다. Convert도 마찬가지다. 그 중에서 float이나 double 같이 소수점이 있는 아이들이 문제가 많다. https://docs.microsoft.com/en-us/dotnet/api/system.single.parse?view=net-6.0 https://docs.microsoft.com/ko-kr/dotnet/api/system.convert?view=net-6.0#methods 본론으로 들어가보자 1. 문제 숫자에서 0.005를 float.parse 했을 때, 0이 되어버리는 현상 기존 서비스하던 국가가 아닌 다른 국가에서 나타나는 현상 2. 원인..

RectTransform과 Transform의 이해

유니티에서 가장 많이 다루는 컴포넌트가 무엇이냐?라고 물으면 이거라고 대답해도 절반은 맞을만큼 자주 쓰이는 녀석이다. 언뜻 배워서 Rect는 UI고 Transform은 인게임 아니에요? 라고 하는 경우가 많다. 하지만 그것은 일부분만 맞고 사실 2D Layout을 위한 것이다. 주로 RectTransform의 정의하는 사각형 안에 UI 요소를 집어넣기 때문에 그렇게 말하는 것이다. **다르게도 충분히 이용가능하다... 하지만 굳이..? RectTransform을 쓰진 않는다. **사실 Transform은 잘 알고 있을테니.. RectTransform 에 대해서 더 잘 알아보자 유니티의 공식 문서가 제공한다. 아래 내용 중 2가지가 RectTransform을 쓰는 이유라고 할 수 있다. 그렇다면 Trans..

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 {..

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..

728x90
반응형