728x90
반응형

Game Development, 게임개발 182

구글 애드몹, GoogleAdmob id 빌드할 때마다 사라짐 [유니티, Unity]

유니티를 키거나 빌드 이후 뭔가 자꾸 에러가 뜨는데 id가 비어있어서 에러뜨는 경우가 무척 많다. 정말 화가난다 화가나. 분명 채웠는데?? 어느새 가보니 사라져있다. 아 왜 채워놨는데 사라지냐.. 그래서 영구적으로 채우는 방법이 있다. 프로젝트 폴더에 들어가서 GoogleMobileAdsSettings.asset을 찾는다. 그래서 여기다 id를 직접 넣는다. 그럼 된다. 광고 넣을 때마다 짜증나고 빌드할 때마다 짜증나지만 이걸로 해결 끝

Object Pooling 유니티에서 이용하기

Object Pooling은 많이 들어봤고 디자인 패턴 중에 가장 이해하기 쉬운 것이라고 생각한다. [Game Developer, 게임개발자/디자인패턴] - Object Pool, 오브젝트 풀, 객체 풀 [디자인패턴](최적화) 더군다나 Unity 2021에서는 이제 엔진에서 지원한다. 그래서 더 좋다. 공부할 때도 유니티의 native에서 지원하는 함수들을 바탕으로 하면 될 것이다. 1. ObjectPool을 이용하는 주체 using UnityEngine; using UnityEngine.Pool; public class Launcher : MonoBehaviour { [SerializeField] Bullet bulletPrefab; private IObjectPool bulletPool; privat..

Observer Pattern를 Unity에서 이용하기

우선 이전의 글을 읽으면 더 이해가 잘 될 것이다. [Game Developer, 게임개발자/디자인패턴] - Observer Pattern, 관찰자, 감시자 패턴 [디자인패턴] Observer Pattern을 쓰는 이유를 알고 써보자 1. Loose Coupling 2. Effectively Check 우선적으로 클래스 간의 커플링을 줄여주는 것이고 그 다음이 효율적인 실행이다. 예를 들어서 설명해보자. ** 레벨이 오르면 체력을 꽉 채워주고 싶다. => 레벨이 오르는지 확인해야함 => 레벨이 오를 때 체력을 갱신해야함 1. Level.cs using System.Collections; using UnityEngine; using UnityEngine.Events; public class Level : ..

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

멀티 플레이 환경에서의 클라이언트와 서버 - 1, 구조

서버와 통신하는 이유는 여러 가지가 있겠지만 멀티 플레이 환경에서 가장 첫 번째 이유는 공정성이다. 싱글 플레이에서 유저가 어떤 행동을 하든 조작을 하든 다른 유저에게 피해를 끼치지 않는다. 저러면 게임이 하고 싶을까? 각 방마다 저러면 내가 게임을 할 수 있을까? 클라이언트를 직접 조작하는 것은 막지 못한다. 하지만 서버와의 연결을 거친다면 클라이언트의 변조를 막을 수 있다. 이것이 멀티 플레이 게임의 가장 중요한 요소인 공정성이다. 모두 다 같은 환경에서 플레이해야만 멀티플레이의 의미가 생기는 것이다. 쉽게 생각하면 모든 게임의 연산을 서버에서 하면 되는거 아냐? 라고 생각한다. 이것을 Authoritative Server라고 하는데 이는 서버에서 연산을 처리하여 클라이언트가 받아서 쓰는 방식이다. ..

Client - side Prection, 클라이언트 단 예측

[Game Developer, 게임개발자/게임네트워크] - 멀티플레이 게임과 네트워크 지연 이 글의 연장이 되는 글이다. 알아보자 우선 가장 중요한 플레이어의 입력에 대해서 알아보려고 한다. 일반적으로 움직임은 클라이언트가 직접 계산하지만 여러 멀티플레이어의 게임은 의도치 않은 상황을 막기 위해 입력조차도 서버권한으로 관리하는 경우가 많다. 하지만 이 때 걸리는 Latency가 높아서 우리는 예측을 하는 것이다. 즉, 우리가 가장 먼저 해야하는 것은 움직임 자체를 클라이언트에서 연산하여 작동하는 것을 비활성화 시켜야 한다. 다시 말하자면 클라이언트는 서버 응답에 관해서 작동을 해야하지 그냥 실제로 클라이언트의 값대로 동작하면 안된다는 말이다. 우선 플레이어를 움직이는 로직을 보자. public class..

멀티플레이 게임과 네트워크 지연

네트워크 지연은 게임에 있어서 가장 중요한 요소 중 하나다. 소위 우리는 말하길 핑이라고 하는데 핑이 낮다는것이 지연율이 낮다는 것이다. 즉, 우리가 서버에 보낸 요청이 응답이 바로 되어 게임에 적용되는 그 사이 시간이 짧다는 것이다. 더 자세히 알아보자 네트워크 지연이란? 싱글 플레이 게임이나 Local Area Network를 사용하는 게임들은 지연에 대해 걱정할 필요가 없다. 1. 지터(파형에 변형이 일어남) 2. RTT(시작 지점에서 대상 지점으로 이동하고 시작 지점으로 다시 이동하는 데 걸리는 시간) 3. Packet Loss(패킷이 전달되지 못해서 유실됨) 어떠한 이유로든 서버와 클라이언트 사이에 정보를 보내거나 받는 작업이 생긴다면 위와 같은 문제에 대해 다시 생각해봐야한다. 그냥 정보를 보..

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

728x90
반응형