전체 글 264

SQL (3) - 산술연산과 문자열

이번 포스트에서는 SQL에서 산술 연산을 어떻게 수행하고 또 문자열은 어떻게 다루는지 알아보겠습니다. 1) 산술연산-- SQL에서의 산술 연산, 산술 연산간 우선순위는 기존의 연산자와 같다-- + - * /(몫) %(나머지) -- 한국 나이를 가져오고 해당 한국 나이가 80 이하인 경우만 오름차순 정렬SELECT 2025 - birthYear AS KoreanAgeFROM playersWHERE deathYear IS NULL AND birthYear IS NOT NULL AND (2025 - birthYear)  SQL에서도 마찬가지로 사칙연산을 수행하는 연산자들간의 우선순위가 존재합니다.이런 우선순위를 주의하며 사용할 필요가 있습니다. 첫 번째 쿼리의 경우 이전에 사용하던 데이터 테이블에서산술 연산을..

데이터베이스 2025.02.04

SQL (2) - ORDER BY문

이번 포스트에서는 정렬을 수행하는 ORDER BY 구문에 대해 알아보겠습니다. 1) 기본적인 ORDER BY-- NULL을 생략하지 않는 ORDER BYSELECT *FROM playersORDER BY birthYear;-- 기본적으로 오름차순으로 정렬함SELECT *FROM players WHERE birthYear IS NOT NULLORDER BY birthYear;-- 내림차순으로 정렬SELECT *FROM players WHERE birthYear IS NOT NULLORDER BY birthYear DESC; ORDER BY 구문은 위와 같이 사용할 수 있습니다.기본적으로 오름차순으로 동작하면서 이를 명시하고 싶다면 ASC를 작성해주고,내림차순으로 동작하고 싶다면 DESC를 작성해주면 됩니다..

데이터베이스 2025.02.04

SQL (1) - SELECT문

이번 포스트에서는 데이터 베이스를 다루는 언어 중 SQL을 다뤄보고SQL에서 특정 데이터를 골라오는 SELECT 문법을 한번 알아보겠습니다. 1) 모든 데이터 가져오기SELECT *FROM players; SELECT 연산자 다음에 * 연산자를 사용해 특정 테이블에서 모든 데이터를 가져올 수 있도록 합니다.또한 FROM 연산자를 통해 데이터를 가져오는 특정 테이블을 지정할 수 있습니다.현재 연산은 players 테이블에서 해당하는 모든 데이터를 가져오게 됩니다.실행결과는 다음과 같습니다. 2) 조건부 데이터 가져오기-- 출생연도가 1866인 경우만 가져오되, nameFirst 행을 name으로 가져오기SELECT nameFirst as name, nameLast, birthYearFROM playersW..

데이터베이스 2025.02.04

유니티 연동 #4

이번 포스트에서는 이전에 만든 구조에 유니티를 추가하여 서버 프로그래밍을 해보겠습니다.우선, 이전에 존재하던 Player 오브젝트를 프리팹화하여 로직에서 생성하도록 하겠습니다. 새롭게 추가되는 스크립트는 다음과 같습니다. MyPlayer의 경우, 내가 조종하는 플레이어를 위한 스크립트입니다.컴포넌트로 해당 스크립트를 오브젝트에 붙여서 동작합니다. Player의 경우, 내가 조종하는 플레이어가 아닌 다른 플레이어를 위한 스크립트입니다.마찬가지로 컴포넌트로서 동작합니다. 마지막으로 PlayerManager의 경우, 패킷에 따라 로직을 수행하되 MyPlayer와 Player에 따라 다르게 로직을 수행합니다. 1) 유니티 프로젝트 - PacketHandlerclass PacketHandler{ public..

C# 2025.01.31

유니티 연동 #3

이번 포스트에서는 이전에 만든 구조를 조금 더 개량해 간단한 프로젝트를 만들어보겠습니다.우선, 패킷 구조를 변경하여 현실적인 패킷 구조를 만들어보겠습니다. 1) 패킷 구조 xml  총 6개의 패킷 구조로 변경되었습니다.각각 다음과 같이 동작합니다. S_BroadcastEnterGame 에서는GameRoom에 입장한 신규 플레이어를 기존의 플레이어들에게 브로드캐스트하고playerId를 기준으로 지정된 3차원 좌표계에 소환합니다. C_LeaveGame의 경우 플레이어가 GameRoom을 떠나는 경우에 사용합니다. S_BroadcastLeaveGame의 경우 플레이어가 GameRoom을 떠나는 경우 사용하고,pla..

C# 2025.01.30

2D RPG - (15 - 4) 단검 투척 스킬 구현_04

이번 포스트에서는 이전에 만든 단검 투척 스킬을 조금 더 개선해보겠습니다.단검이 날아갈 때 시각적으로 돋보이게 개선하고단검이 적중한 후 다시 회수할 수 있도록 만들어보겠습니다. 1) PlayerControllerpublic class PlayerController : BaseCharacterController{ . . . // Skill Info . . . public GameObject _sword; . . . public void AssignNewSword(GameObject newSword) { _sword = newSword; } public void ClearTheSword() { Destroy(_sword); } . ..

유니티 연동 #2

이번 포스트에서는 이전의 코드에서 유니티의 자료형 중 하나인 GameObject를 사용해보겠습니다.그러나 이전의 상태에서 유니티의 자료형 즉, 유니티의 데이터를 사용하는 경우 실행되지 않는 문제가 발생하게 됩니다. 그 이유는 다음과 같은데,현재 네트워크 패킷은 유니티의 메인 스레드가 아닌 ThreadPool에 저장된 패킷을 가져와 사용하고 있습니다.이때 유니티에서는 게임의 스레드가 아닌 다른 스레드에서 게임 요소와 관련된 로직을 수행하는 것을 원천봉쇄하기에 실행이 되지 않습니다. 따라서 이를 위해 만들어진 패킷을 바로 사용하는 것이 아닌 큐에 일시적으로 보관하고 보관된 패킷을 유니티에서 사용할 수 있도록 조정하여 사용하도록 하겠습니다. 1) 유니티 프로젝트 - PacketQueuepublic class ..

C# 2025.01.28

유니티 연동 #1

이번 포스트에서는 이전에 만든 네트워크 프로그램을 Unity와 연결하여 수행하도록 하겠습니다.우선 이번 포스트에서는 클라이언트를 만들어보도록 하겠습니다. 유니티 에디터에서 클라이언트 프로젝트를 하나 생성하고 필요한 스크립트를 가져오겠습니다. 1) 서버 - 클라이언트 공용으로 사용하는 스크립트 공용으로 사용하는 스크립트 중에서, 이전의 Listener와 JobQueue 그리고 PriorityQueue의 경우서버 단계에서 사용하므로 가져오지 않습니다. 또한, 클라이언트는 ServerSession을 사용하므로 ServerSession을 위의 경로에 포함하였습니다. 2) 클라이언트에서만 사용하는 스크립트 클라이언트에서 패킷을 보내고 받기 위한 스크립트를 위와 같이 준비하였습니다. 3) GenPackets.bat..

C# 2025.01.28

2D RPG - (15 - 3) 단검 투척 스킬 구현_03

이번 포스트에서는 단검 투척 시에 단검의 궤적을 그리고 궤적대로 날아가도록 구현햐보겠습니다.따라서 기존의 단검 투척 스킬 그 자체를 의미하는 클래스인 SkillThrowingSword의 로직을 수정합니다. 1) SkillThrowingSwordpublic class SkillThrowingSword : SkillTemplate{ [Header("Skill Info")] [SerializeField] private GameObject _swordPrefab; [SerializeField] private Vector2 _launchForce; [SerializeField] private float _swordGravity; private Vector2 _finalD..