게임 엔진/Unity

게임 엔진/Unity

[Unity] C# Event 컨벤션 정리

Event Convention C#의 이벤트 관련 컨벤션은 꽤나 복잡하다. 개발하는 조직에 따라서도 많이 달라질 수 있으므로 네이밍 컨벤션의 경우에는 현재 속한 조직에 맞게 적용하는것이 바람직할 것이다. 다만, 유니티에서 이벤트와 연관된 개념들이 어떻게 분리되어야 하는지, 어떤 그룹으로 구분되어야 하는지에 대해서는 정리해둘 필요가 있다. 구분 기준을 명확하게 정해두었다면 조직에 따라 네이밍 기준이 달라지더라도 개발에 있어서 컨벤션을 통한 생산성을 극대화시킬 수 있을 것이다. 다음은 MS에서 제공하는 이벤트 네이밍 컨벤션이다. https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members#names-of-ev..

게임 엔진/Unity

[Unity] 유니티 설계 경험 기록

유니티 설계 경험유니티를 이용하면서 내가 경험한 내용을 정리한 글이다. 이 글은 유니티를 개발하는 과정 속에서 지속적으로 업데이트 될 예정이다. 핵심 개념다음 개념들은 알고 시작하는 것이 좋다. 유니티 버전단위 문서유니티 버전에 따른 매뉴얼이다. 이 문서를 통해 대부분의 유니티 관련한 이용방법을 숙지할 수 있다.https://docs.unity3d.com/2021.2/Documentation/Manual/index.html Unity - Manual:  Unity User Manual 2021.2Use the Unity Editor to create 2D and 3D games, apps and experiences. Download the Editor at unity3d.com. Th..

게임 엔진/Unity

[Google Play] 구글 플레이 결제 시스템(IAP) 세팅

Google Play IAP 백엔드 설정 Google Play Console을 이용하여 안드로이드 앱에 결제 시스템(IAP)을 붙일 수 있다. 하지만 대부분의 서비스는 이러한 결제 정보를 따로 관리하는 백엔드 시스템을 구축해야한다. 이 작업이 왜 필요할까? 예를 들어 어떤 게임 유저가 결제를 통해 얻은 아이템이 있다고 해보자. 게임을 하다가 실수로 게임 앱을 지웠다가 다시 깔면 어떻게 될까? 따로 백엔드 서버거 없는 클라이언트 게임 앱의 경우, 결제 데이터가 남아있지 않을 것이다. 그러므로 백엔드 서버가 이러한 게임 데이터에 대한 내용을 모두 기록하고 있도록 하고, 다시 앱을 설치할 때 그 데이터를 로드하도록 해야한다. 하지만 이렇게 백엔드를 구축할 때 반드시 해주어야 하는 작업이, 어떤 클라이언트로부터..

게임 엔진/Unity

[Google Play] 구글 플레이 게임 서비스 세팅

Google Play Game Service Google Play에 게임 앱을 올리고 모바일에서 Google Play에 로그인까지 가능하도록 해보자. 먼저 Google Play Console에 앱을 올리는 방법에 대해 알아둘 필요가 있다. 다음 링크를 참고하자. 이 링크를 통해 개발자 계정 등록과 Google Play Console의 기본적인 세팅까지 작업해야한다. (게임 앱으로 등록해야하기 때문에 앱 게시까지는 할 필요없음) https://algorfati.tistory.com/90 Google Play Console Google Play에 앱을 출시하기 위해서는 Google Play Console을 이용하여야 한다. Google Play Console 페이지 링크 play.google.com/cons..

게임 엔진/Unity

[Unity] [Example] 유니티에서 데이터 관리 방법(ScriptableObject)

ScriptableObject ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너이다. ScriptableObject의 주요 사용 사례 중 하나는 값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄이는 것이다. 이는 연결된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리팹이 있는 프로젝트의 경우 유용하다. 프리팹은 인스턴스화할 때마다 해당 데이터의 자체 사본이 생성된다. 이처럼 중복 데이터를 저장하는 대신 ScriptableObject를 이용하여 데이터를 저장한 후 모든 프리팹의 레퍼런스를 통해 액세스할 수 있다. 즉, 메모리에 데이터 사본을 하나만 저장한다. https://www.youtube.co..

게임 엔진/Unity

[Unity] [Example] 평면 연산 방법 (Plane)

Plane 유니티 Plane 예제이다. GameObject의 위치를 기준으로 4방에 평면 4개를 배치하고, 8방향으로 각 평면에 Raycast를 하여 거리를 재는 예제이다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class SnakeAgent : MonoBehaviour { private static readonly Vector3Int Forward = new Vector3Int(0, 0, 1); private static readonly Vector3Int Back = new Vector3Int(0, 0, -1); private static readonly Vector3Int Left = ..

게임 엔진/Unity

[Unity] [Example] Mesh

Mesh Unity Mesh 관련 예제이다. MeshDataPrinter.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class MeshDataPrinter : MonoBehaviour { [SerializeField] private MeshFilter _targetMesh; // Start is called before the first frame update void Start() { PrintMeshData(_targetMesh.mesh); } public static void PrintMeshData(Mesh mesh) { Debug.Log("vertices"); foreach (va..

게임 엔진/Unity

[Unity] [Example] Singleton

Singleton 모든 영역에서 접근가능한 데이터를 만들어야하는 상황이 생길 수 있다. 예를 들면, 에셋을 미리 로드해서 관리하는 에셋 관리자 객체나, 데이터 테이블을 미리 생성해놓는 데이터 테이블 관리자 객체와 같은 것들이 이에 해당된다. 이처럼 어떤 위치에서도 참조가 가능하도록 해당 객체 설계하는 방법을 싱글턴 디자인 패턴이라 부른다. 하지만 유니티에서는 객체가 GameObject를 갖고 있는 경우도 있기 때문에, 싱글턴 객체를 만들기 위해서 일반적인 방법보다는 조금 더 신경써야할 부분들이 있다. Singleton.cs 다음과 같이 Singleton 객체를 만든다. using System.Collections; using System.Collections.Generic; using UnityEngin..

게임 엔진/Unity

[Unity] Hp Bar 만들기

Hp Bar 유니티 Hp Bar 제작 방법이다. https://www.youtube.com/watch?v=BLfNP4Sc_iA&t=1118s HpBar.cs using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class HpBar : MonoBehaviour { [SerializeField] private Slider _slider; public void SetValue(float value) { _slider.value = value; } } BillBoard.cs using System.Collections; using System.Collections.Gene..

게임 엔진/Unity

[Unity] 글로벌 이벤트 관리 방법

글로벌 이벤트 관리 방법 이벤트를 관리하는 시스템을 하나 만듦으로서 굉장히 편하게 게임 개발을 진행할 수 있다. 게임오브젝트간의 상호작용이 필요한 상황에서는 필연적으로 종속성이 생길 수 밖에 없다. 하지만 이 종속성을 Event Manager라는 하나의 오브젝트로 모으도록 할 수 있다. 내 캐릭터가 어떤 영역에 들어갔을 때, 문이 열리는 상황을 가정해 보자. 문이 열리는 행동을 어떤 영역이 이벤트를 발생시켜서 수행해야 하는데, 객체 간 서로 상호참조를 통해 코드를 구현하면 코드가 너무 지저분해진다. 그러므로 먼저 EventManager 클래스를 생성하자. EventManager.cs EventManager는 게임 내 모든 오브젝트 간 상호작용 이벤트를 다루는 클래스이다. 싱글턴 클래스로 설계하여 어떤 오..

게임 엔진/Unity

[Unity] 전략게임 카메라 제작 방법

Strategy Camera Unity에서 전략 시뮬레이션을 위한 카메라를 제작해야하는 경우가 있다. 먼저 Camera Rig로 사용할 GameObject를 하나 생성하고, 그 하위에 MainCamera를 놓는다. 그 후 MainCamera의 값을 다음과 같이 설정한다. StrategyCameraController.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class StrategyCameraController : MonoBehaviour { public Transform followTransform; public Transform cameraTransform; public float no..

게임 엔진/Unity

[Unity] 동적타임에 NavMesh 생성하기

동적타임에 NavMesh 생성하기 NavMesh를 런타임에 생성해야 하는 상황이 생길 수 있다. 맵 자체를 제작하는 크래프트류의 게임들은 게임 중에 갑자기 새로운 맵이 생성될 수 있고, 그에 따라 NavMesh로 새로 생성되어야 할 수 있다. Unity 엔진 내부에서 이런 상황을 위해 제공해주는 기능은 없지만, 유니티에서 오픈소스로 제공해주는 코드가 있다. https://github.com/Unity-Technologies/NavMeshComponents Unity-Technologies/NavMeshComponents High Level API Components for Runtime NavMesh Building - Unity-Technologies/NavMeshComponents github.com..

게임 엔진/Unity

[Unity] 커스텀 에디터 제작 방법 (Editor Customize)

Editor Customize 유니티에서 에디터를 커스터마이징 하는 방법이다. 에디터 커스터마이징은 개발자로 하여금 유니티 에디터 자체에 특정 기능을 추가하는 방법이다. 예를 들면 인스펙터의 스크립트에 어떤 버튼을 누르면 자동으로 에셋들을 로드해준다거나, 자동으로 맵을 생성해준다거나 등등 잘 활용한다면 개발하는데 굉장한 편의성을 갖출 수 있다. (이전에 근무하던 팀에서는 따로 에디터만 작업하는 개발자들도 있었다.) 유니티 에디터 커스터마이징을 하기에 앞서 몇가지 알아두어야 하는 개념들이 있다. 먼저 유니티의 에디터 코드가 동작하는 레벨에 대해 알아두어야 한다. 우리가 일반적으로 이용하는 C# 스크립트들은 모든 레벨에서 이용된다. 즉 에디터에서도 동작하고, 빌드된 디바이스에서도 동작한다. 하지만 에디터 코..

게임 엔진/Unity

[Unity] 길찾기 시스템을 통한 이동과 애니메이션 컨트롤러

Pathfinder with Animation Movement 기본적으로 Unity에서는 NavMeshAgent를 지원한다. 이 컴포넌트를 이용한다면 굉장히 쉽게 길찾기(Pathfinding)가 가능한 오브젝트를 제작할 수 있다. 하지만, NavMeshAgent의 SetDestination함수를 이용하면 타겟 위치를 주었을 때 해당 위치까지 이동시키는 기능을 쉽게 구현할 수 있다. 하지만 이 함수는 GameObject의 Transform을 엔진 코드 내에서 직접 수정하도록 설계되어 있고, 이동 관련 로직이 숨겨져 있어서 커스텀 이동을 사용하는 경우 문제가 생길 수 있다. 예를 들면 애니메이션 자체에 루트 모션이 포함되어 있는 경우 루트 모션을 활용하여 길찾기 로직을 구현하고 싶을 수 있겠지만 (보폭에 맞..

AlgorFati
'게임 엔진/Unity' 카테고리의 글 목록