728x90
반응형

Game Development, 게임개발 182

이벤트 큐의 활용 - 서버 요청 응답의 순서 보장

Event Queue에 대한 글을 이미 썼다. [Game Developer, 게임개발자/디자인패턴] - Event Queue, 이벤트 큐 [디자인패턴](디커플링) 솔직히 지식으로 배울 때랑 차원이 다르다. 왜냐하면 요구 사항이 너무나 달라지기 때문이다. 하지만 기본을 알면 모든 것은 응용이 가능했다고 했던가... 결국 해냈다. 이벤트 큐는 실제로 어떠한 이벤트를 차례대로 수행하고 싶을 때 사용한다. 예를 들어 효과음이 일어나는 모든 상황을 이벤트 큐에 넣고 큐에서 빼면서 효과음을 실행한다던지 정말 무궁무진하다. 다시 말해서 내가 이벤트 큐에 넣는 시점에 실행되는 것이 아니라 이벤트 큐에서 빼낼 때 실행된다는 것이다. 실제로 1초동안의 모든 이벤트를 넣고 1초 이후에 이벤트 큐를 모두 비워내며 실행한다던지..

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

우리가 유니티에서 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로 변환될 ..

튜토리얼에 대한 고찰

오늘은 튜토리얼에 대해서 고찰해보려고 한다. 튜토리얼이란 무엇일까? 짧게 말하면 유저에게 프로그래머의 의도를 전달하는 것과 같다. 프로그래머가 유저에게 바라는 것을 게임 속에 녹이거나 전달하는 것이다. 맨날 메이플 얘기를 해서 미안하지는 않다. 그냥 내 첫 RPG라서 기억에 남는다. 튜토리얼을 보면 사용자의 행동을 유도한다. 1. NPC를 더블클릭을 유도하여 대화를 이끌어내고 2. Alt 버튼을 명시하여 사용자에게 조작법을 알려준다. 하지만.. 유도란 것은 유저가 알아채고 하기 싫어서 안하면 그만이다. 하지만 그렇게 되면 유저에게 프로그래머의 의도를 전달할 수 없다. 때문에 사용자의 예외 상황을 모두 고려해야 한다. 1. 만약 NPC에게 말을 걸지 않고 다음 맵으로 넘어가려하면 어떻게 해야할까? -> 포..

버프 시스템,Buff System 에 대한 고찰

우리는 게임을 만들 때 버프라는 것이 있다. 캐릭터에게 좋은 효과를 주면 버프 상대방의 뭔가를 방해하면 디버프라고 한다. 그렇다면 이러한 버프는 어떻게 만들어져서 오브젝트에 적용되어야 하는 것일까? 알아보자하면.. 내가 다 아는 것 같고 사실 하나도 모른다.. 그냥 생각해보자 우선 단발적인 스킬과 다르게 버프에는 지속시간이라는 개념이 존재한다. 뭐 스킬 자체도 몇 초라는 스킬 효과시간이 있겠지만.. 통틀어서 지속시간이 존재하는 스킬을 버프라고 해보자. 음.. 저기에 다 있네??? 저기서 얻을 수 있는 정보는 버프 아이콘 버프 지속시간 버프 지속시간 비례 까만 부분 버프 여러개일 때 배치 등이 있다. 우리는 버프를 게임에 적용하기 위해서 무엇이 필요할까???? 0. 사용자가 버프를 사용할 수 있는 상황인지..

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
반응형