짧은 기록글 활용 용도 서버에서 받은 문자열 날짜(시간)를 DateTime 구조체로 파싱 현재 날짜(시간)과 비교하여 남은 시간을 계산할때 사용함 Unity식 예시 DateTime dt = DateTime.ParseExact("2023-02-23 16:54:06", "yyyy-MM-dd HH:mm:ss", null); Debug.Log(dt.ToString()); Debug.Log(string.Format("Now: {0}", DateTime.Now.ToString())); TimeSpan ts = dt - DateTime.Now; Debug.Log(string.Format("남은 시간: {0}", ts.ToString())); Debug.Log(string.Format("소숫점 제거: {0}", ts...
개요최근 작업중인 프로젝트에서 실시간 pvp모드를 개발하고 있었다.프로토타입은 포톤을 이용해서 동기화를 진행한 후 플레이를 해봤고,이제 회사의 TCP서버로 이전해 달라는 지시가 내려와 작업을 진행하였다. 포톤의 경우에는 TransformView 컴포넌트가 있어서위치동기화의 경우 아주 쉽게 구현할 수 있는데 직접 위치 동기화를 구현할려면 아무리 정보를 모아서 한번에 보낸다 해도매 프레임 패킷을 보내는거는 무리가 있다. 그래서 데드레커닝 기법을 활용하여 위치 동기화를 구현한 사례를 적는다. 본문마우스로 이동하는게임이었다면 꽤 간단한 문제였을것이다.예를들어 LOL이라면유저가 마우스로 목적지를 클릭하면 그때 한번만 출발지와 목적지를 동기화 하고양측 클라이언트는 결과가 같다는 보장이있는 길찾기 알고리즘을 사용하..
개요 Unity 프로젝트를 처음 생성할 때 꼭 하는 우선순위들이 있다. 1. DoTween에셋 임포트 2. 오딘 인스펙터 에셋 임포트(유료) 3. 오브젝트 풀링 구현 이 글에서는 오브젝트 풀링 구현을 기록할려고 한다. 오브젝트 풀링은 메모리 최적화를 위해 빼놓을 수 없는 시스템이라고 생각한다. Instantiate와 Destroy를 쓸때마다 괜히 죄책감이들고 그렇기 때문에 항상 구현해놓고 시작하는데 이 기회에 블로그에 적어놓을려고 한다. Pool을 관리하는 PoolManager클래스 먼저 풀을 관리하며 Push와 Pop을 해주는 PoolManager 클래스이다. 딕셔너리와 스택으로 풀을 관리하고 Pop을 할때는 오브젝트나 String키값을 인수로 받아서 오브젝트를 꺼내준다. poolableList에는 풀..
public static Vector3 GetRandomPointInsideCollider(BoxCollider boxCollider) { Vector3 extents = boxCollider.size / 2f; Vector3 point = new Vector3( Random.Range(-extents.x, extents.x), Random.Range(-extents.y, extents.y), Random.Range(-extents.z, extents.z) ) + boxCollider.center; return boxCollider.transform.TransformPoint(point); } Static클래스의 Static함수로 정의하면 어디서든 사용하기 편하다.
URP에서 내장함수 OnPostRender() (렌더링 이후 호출됨)을 작성했는데 호출이 되지않아서 검색해보니 나온 방법 using UnityEngine; using UnityEngine.Rendering; public class MyClass: MonoBehaviour { void OnEnable() { RenderPipelineManager.endCameraRendering += RenderPipelineManager_endCameraRendering; } void OnDisable() { RenderPipelineManager.endCameraRendering -= RenderPipelineManager_endCameraRendering; } private void RenderPipelineMana..
탭 투 블라스트 방식의 캔디팡, 꿈의집과 비슷한 퍼즐게임을 만들어보며레벨 에디터를 구현해 보았다.유니티의 에디터 커스터마이징은 거의 경험이 없었는데이 기회에 버튼이라든가 텍스쳐2D를 불러는거라든가여러가지를 배울 수 있었다. 에디터 스크립트#if UNITY_EDITORusing System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using UnityEngine.UIElements;using System.Linq;[CustomEditor(typeof(LevelData))]public class LevelDataEditor : Editor{ private LevelData level; ..