분류 전체보기
-
1. 쓰레드 구현using System;using System.Threading;using System.Threading.Tasks;namespace ServerCore{ class MainClass { static bool _stop = false; // volatile = 최적화 노!, 캐시 무시하고 최신 값 읽게 함 static void ThreadMain() { Console.WriteLine("쓰레드 시작 !"); while (_stop == false) { } Console.WriteLine("쓰레드 종료 !"); } st..
게임서버 만들기 - 쓰레드와 컴파일러, volatile1. 쓰레드 구현using System;using System.Threading;using System.Threading.Tasks;namespace ServerCore{ class MainClass { static bool _stop = false; // volatile = 최적화 노!, 캐시 무시하고 최신 값 읽게 함 static void ThreadMain() { Console.WriteLine("쓰레드 시작 !"); while (_stop == false) { } Console.WriteLine("쓰레드 종료 !"); } st..
2024.06.12 -
1. Threadstatic void MainThread(object state){ for (int i = 0; i Thread t = new Thread(MainThread);t.Name = "Test Thread";t.IsBackground = true;t.Start();MainThread 라는 메서드를 정의하고, 해당 메서드를 실행하는 Thread 를 실행한다. 기본적으로 foreground 로 실행되기 때문에,IsBackGround 를 true 로 변경하면 백그라운드에서 실행되며, Start 로 스레드를 실행시킬 수 있다. 2. Thread Pool하지만 스레드가 필요할 때마다 위에 처럼 하나하나 지정해서 생성하면 관리가 어려워지게 된다.그래서 ThreadPool 이라는 기능이 존재한다. T..
게임서버 만들기 - 쓰레드 생성1. Threadstatic void MainThread(object state){ for (int i = 0; i Thread t = new Thread(MainThread);t.Name = "Test Thread";t.IsBackground = true;t.Start();MainThread 라는 메서드를 정의하고, 해당 메서드를 실행하는 Thread 를 실행한다. 기본적으로 foreground 로 실행되기 때문에,IsBackGround 를 true 로 변경하면 백그라운드에서 실행되며, Start 로 스레드를 실행시킬 수 있다. 2. Thread Pool하지만 스레드가 필요할 때마다 위에 처럼 하나하나 지정해서 생성하면 관리가 어려워지게 된다.그래서 ThreadPool 이라는 기능이 존재한다. T..
2024.06.12 -
1.Pool ManagerUnity 에서 Object 가 필요할 때 마다 Load 로 불러오면 엄청난 과부하와 함께 성능의 하락을 가져올 수 있다.그래서 필요하거나 동일한 Object의 Pool 을 생성하고 일정 개수를 Pool 이 가지고 있도록 하여 꺼내쓰면 Load 를 반복하는 횟수가 적어져서 성능의 향상을 가져올 수 있다.# Poolable.csusing System.Collections;using System.Collections.Generic;using UnityEngine;public class Poolable : MonoBehaviour{ public bool IsUsing;}단순히 Pooling 대상인지 확인할 수 있는 Component, 사용될 수 있으니 IsUsing 이라는 boo..
Unity 게임 만들기 프로젝트 - PoolManager1.Pool ManagerUnity 에서 Object 가 필요할 때 마다 Load 로 불러오면 엄청난 과부하와 함께 성능의 하락을 가져올 수 있다.그래서 필요하거나 동일한 Object의 Pool 을 생성하고 일정 개수를 Pool 이 가지고 있도록 하여 꺼내쓰면 Load 를 반복하는 횟수가 적어져서 성능의 향상을 가져올 수 있다.# Poolable.csusing System.Collections;using System.Collections.Generic;using UnityEngine;public class Poolable : MonoBehaviour{ public bool IsUsing;}단순히 Pooling 대상인지 확인할 수 있는 Component, 사용될 수 있으니 IsUsing 이라는 boo..
2024.06.11 -
1. Data Manager서버나 혹은 클라이언트에서 데이터를 모두 들고 있으면 과부하가 걸리고, 관리에 용이하지 않다.그래서 대부분의 정보를 json 형식으로 data 파일로 관리하고, 서버와 클라이언트는 해당 data 파일을 통신하여 정보를 교환하는 식으로 데이터를 관리하게 된다.# StatData{ "stats": [ { "level": "1", "hp": "100", "attack": "10" }, { "level": "2", "hp": "150", "attack": "15" }, { "level": "3", "hp": "200", "attack": "20" } ]}stats 라는 ..
Unity 게임 만들기 프로젝트 - DataManager1. Data Manager서버나 혹은 클라이언트에서 데이터를 모두 들고 있으면 과부하가 걸리고, 관리에 용이하지 않다.그래서 대부분의 정보를 json 형식으로 data 파일로 관리하고, 서버와 클라이언트는 해당 data 파일을 통신하여 정보를 교환하는 식으로 데이터를 관리하게 된다.# StatData{ "stats": [ { "level": "1", "hp": "100", "attack": "10" }, { "level": "2", "hp": "150", "attack": "15" }, { "level": "3", "hp": "200", "attack": "20" } ]}stats 라는 ..
2024.06.11 -
1. Unity Coroutine특정 함수가 긴 작업이라, 나눠서 수행되도록 하거나, 조건이 만족되면 다음 코드를 수행하거나, 진행 되다가 외부 요인으로 인해 끊어야 하는 등의 다양한 경우가 있을 수 있다. 이런 경우에 함수를 나눠서 실행하도록 돕는 것이 Coroutine 이다.Coroutine co;Coroutine 이라는 co 를 생성해준다.IEnumerator CoStopExplode(float seconds) { Debug.Log("Stop Enter"); yield return new WaitForSeconds(seconds); Debug.Log("Stop Execute!!!"); if (co != null) { ..
Unity 게임 만들기 프로젝트 - Coroutine1. Unity Coroutine특정 함수가 긴 작업이라, 나눠서 수행되도록 하거나, 조건이 만족되면 다음 코드를 수행하거나, 진행 되다가 외부 요인으로 인해 끊어야 하는 등의 다양한 경우가 있을 수 있다. 이런 경우에 함수를 나눠서 실행하도록 돕는 것이 Coroutine 이다.Coroutine co;Coroutine 이라는 co 를 생성해준다.IEnumerator CoStopExplode(float seconds) { Debug.Log("Stop Enter"); yield return new WaitForSeconds(seconds); Debug.Log("Stop Execute!!!"); if (co != null) { ..
2024.06.10 -
1. SoundManagerrpg 게임에서 Sound 역시 중요한 요소 중 하나이다. 크게 Bgm 과 Effect 효과로 구성되고, Sound 를 일일히 관리하기엔 힘드니 Manager 를 통해 관리할 수 있도록 코드를 구성한다.# SoundManager.csusing System.Collections;using System.Collections.Generic;using UnityEngine;public class SoundManager{ AudioSource[] _audioSources = new AudioSource[(int)Define.Sound.MaxCount]; Dictionary _audioClips = new Dictionary(); // Mp3 Player -> AudioS..
Unity 게임 만들기 프로젝트 - SoundManager1. SoundManagerrpg 게임에서 Sound 역시 중요한 요소 중 하나이다. 크게 Bgm 과 Effect 효과로 구성되고, Sound 를 일일히 관리하기엔 힘드니 Manager 를 통해 관리할 수 있도록 코드를 구성한다.# SoundManager.csusing System.Collections;using System.Collections.Generic;using UnityEngine;public class SoundManager{ AudioSource[] _audioSources = new AudioSource[(int)Define.Sound.MaxCount]; Dictionary _audioClips = new Dictionary(); // Mp3 Player -> AudioS..
2024.06.10 -
1. Scene Manager게임에서는 일반적인 게임화면, 로그인 화면, 서버선택 화면 등 다양한 화면들이 존재한다. Unity 에서는 각 단계를 Scene 이라고 나눌 수 있다.이러한 Scene 을 관리해주는 SceneManager 를 기본적으로 제공해주지만, 개인적인 취향에 맞게 커스텀하기 위해서 별도의 SceneManager 를 래핑해서 생성해주는 작업을 진행한다.public enum Scene { Unknown, Login, Lobby, Game, }Define.cs 에 각 Scene 의 이름을 가진 enum 타입을 하나 만들어준다. 이러면 우리가 관리할 Scene 의 종류와 이름을 명확히 구분할 수 있다.# SceneManagerEx...
Unity 게임 만들기 프로젝트 - SceneManager1. Scene Manager게임에서는 일반적인 게임화면, 로그인 화면, 서버선택 화면 등 다양한 화면들이 존재한다. Unity 에서는 각 단계를 Scene 이라고 나눌 수 있다.이러한 Scene 을 관리해주는 SceneManager 를 기본적으로 제공해주지만, 개인적인 취향에 맞게 커스텀하기 위해서 별도의 SceneManager 를 래핑해서 생성해주는 작업을 진행한다.public enum Scene { Unknown, Login, Lobby, Game, }Define.cs 에 각 Scene 의 이름을 가진 enum 타입을 하나 만들어준다. 이러면 우리가 관리할 Scene 의 종류와 이름을 명확히 구분할 수 있다.# SceneManagerEx...
2024.06.10 -
1. UI Manager게임에는 정말 많은 UI 가 들어간다. 작은 Image 부터 버튼, 팝업 등등 많은 오브젝트를 처리해야하기 때문에 작은 규모의 게임에선 일일히 오브젝트 생성 및 스크립트 연결을 해줄 수 있지만 규모가 커지면 한계가 있다. 따라서 오브젝트를 자동으로 생성, 스크립트를 연결해주는 등의 작업을 미리 해놓아서 Prefabs 만 만든다면 언제든 게임에 코드로 사용할 수 있도록 자동화 하는 작업이다.그 전에 편리한 메서드를 만들어 놓아 자동화를 쉽게 구현할 수 있도록 돕는 Util을 작성한다.# Util.csusing UnityEngine;using System.Collections;public class Util{ public static T GetOrAddComponent(Game..
Unity 게임 만들기 프로젝트 - UI Manager, 자동화1. UI Manager게임에는 정말 많은 UI 가 들어간다. 작은 Image 부터 버튼, 팝업 등등 많은 오브젝트를 처리해야하기 때문에 작은 규모의 게임에선 일일히 오브젝트 생성 및 스크립트 연결을 해줄 수 있지만 규모가 커지면 한계가 있다. 따라서 오브젝트를 자동으로 생성, 스크립트를 연결해주는 등의 작업을 미리 해놓아서 Prefabs 만 만든다면 언제든 게임에 코드로 사용할 수 있도록 자동화 하는 작업이다.그 전에 편리한 메서드를 만들어 놓아 자동화를 쉽게 구현할 수 있도록 돕는 Util을 작성한다.# Util.csusing UnityEngine;using System.Collections;public class Util{ public static T GetOrAddComponent(Game..
2024.06.10 -
1. Camera보통 RPG 게임에서 Player Object 가 이동하면 Camera 는 그에 맞춰 계속 이동해야 한다. 먼저 enum 을 작성해서 가독성을 높일 수 있도록 준비한다.# Defins.csusing System.Collections;using System.Collections.Generic;using UnityEngine;public class Define{ public enum MouseEvent { Press, Click, } public enum CameraMode { QuarterView, }}CameraMode 와 Click 이동을 구현하기 위한 MouseEvent 를 작성한다. 이후에 CameraControl..
Unity 게임 만들기 프로젝트 - Camera, Click 이동 구현1. Camera보통 RPG 게임에서 Player Object 가 이동하면 Camera 는 그에 맞춰 계속 이동해야 한다. 먼저 enum 을 작성해서 가독성을 높일 수 있도록 준비한다.# Defins.csusing System.Collections;using System.Collections.Generic;using UnityEngine;public class Define{ public enum MouseEvent { Press, Click, } public enum CameraMode { QuarterView, }}CameraMode 와 Click 이동을 구현하기 위한 MouseEvent 를 작성한다. 이후에 CameraControl..
2024.06.08 -
1. RayCastingrpg 게임에서 말 그대로 Object 를 클릭한다면 원하는 Object 에서 클릭 이벤트가 발생해야 한다. 즉 레이저를 쏴서 해당 레이저에 존재하는 Object 를 클릭하기 위함이다. 또는 케릭터의 정면에 레이저가 발사되어 일정 범위 내에 유닛만 타격하는 범위를 지정한다던지 다양하게 응용될 수 있는 기술이다. 즉 광선과 객체의 교차점을 파악하는 기술Vector3 look = transform.TransformDirection(Vector3.forward);Debug.DrawRay(transform.position + Vector3.up, look * 10, Color.red);RaycastHit hit;if (Physics.Raycast(transform.position + Ve..
Unity 게임 만들기 프로젝트 - RayCasting1. RayCastingrpg 게임에서 말 그대로 Object 를 클릭한다면 원하는 Object 에서 클릭 이벤트가 발생해야 한다. 즉 레이저를 쏴서 해당 레이저에 존재하는 Object 를 클릭하기 위함이다. 또는 케릭터의 정면에 레이저가 발사되어 일정 범위 내에 유닛만 타격하는 범위를 지정한다던지 다양하게 응용될 수 있는 기술이다. 즉 광선과 객체의 교차점을 파악하는 기술Vector3 look = transform.TransformDirection(Vector3.forward);Debug.DrawRay(transform.position + Vector3.up, look * 10, Color.red);RaycastHit hit;if (Physics.Raycast(transform.position + Ve..
2024.06.07 -
1. Collision게임 세상에서 땅을 딛고 벽을 만나면 더이상 이동할 수 없는 등 가로막히는 현상이 있다. 이것은 각 물체에 Collider 라는 설정이 되어 있고 각각의 Collider 끼리 부딪히면 Collision 판정이 일어난다. Collision 판정이 일어났을 때 다양한 동작을 할 수 있기 때문에 충돌을 관리하는 것 역시 중요하다. 2. ColliderPlayer Object 가 땅을 딛도록 하기 위해서, 3D Object -> Plain 을 선택하여 땅을 만들어준다.Plain 은 기본적으로 Mesh Collider 를 가지고 있는데, 평평한 땅의 충돌을 감지해주는 Collider 가 설정되어 있는 것이다.Player Object 에는 Capsule Collider 를 설정해준다. Sce..
Unity 게임 만들기 프로젝트 - 충돌 (Collision)1. Collision게임 세상에서 땅을 딛고 벽을 만나면 더이상 이동할 수 없는 등 가로막히는 현상이 있다. 이것은 각 물체에 Collider 라는 설정이 되어 있고 각각의 Collider 끼리 부딪히면 Collision 판정이 일어난다. Collision 판정이 일어났을 때 다양한 동작을 할 수 있기 때문에 충돌을 관리하는 것 역시 중요하다. 2. ColliderPlayer Object 가 땅을 딛도록 하기 위해서, 3D Object -> Plain 을 선택하여 땅을 만들어준다.Plain 은 기본적으로 Mesh Collider 를 가지고 있는데, 평평한 땅의 충돌을 감지해주는 Collider 가 설정되어 있는 것이다.Player Object 에는 Capsule Collider 를 설정해준다. Sce..
2024.06.06 -
1. Prefabs미리 구성된 게임 객체, 오브젝트를 생성할 때 사용되는 클래스 같은 원본을 의미. 얼마든지 복사해서 오브젝트를 생성할 수 있음자주 사용되는 객체들을 미리 만들어 놓고, 필요할 때마다 재사용할 수 있도록 하는 방식using System.Collections;using System.Collections.Generic;using UnityEngine;public class PrefabTest : MonoBehaviour{ public GameObject prefab; GameObject tank; void Start() { tank = Instantiate(prefab); Destroy(tank, 3.0f); }} 위와 같은 Script를 ..
Unity 게임 만들기 프로젝트 - Resource Manager1. Prefabs미리 구성된 게임 객체, 오브젝트를 생성할 때 사용되는 클래스 같은 원본을 의미. 얼마든지 복사해서 오브젝트를 생성할 수 있음자주 사용되는 객체들을 미리 만들어 놓고, 필요할 때마다 재사용할 수 있도록 하는 방식using System.Collections;using System.Collections.Generic;using UnityEngine;public class PrefabTest : MonoBehaviour{ public GameObject prefab; GameObject tank; void Start() { tank = Instantiate(prefab); Destroy(tank, 3.0f); }} 위와 같은 Script를 ..
2024.06.05