목록Unity(유니티) (72)
Deff_Dev
Predicate반환 값이 반드시 Bool이고 입력 파라미터가 1개인 Delegate이다.반환 타입을 정해야줘야 하는 Func와 달리 Bool 타입으로 고정이기 때문에 사용 목적을 명확하게 전달할 수 있다.List numbers = new List { -1, 5, 0, -3, 10 };// Predicate 정의Predicate isPositive = delegate (int x){ return x > 0;};// 리스트에서 조건을 만족하는 요소 찾기int firstPositive = numbers.Find(isPositive);Console.WriteLine("첫 번째 양수: " + firstPositive);중복 제거한 랜덤 요소 반환 프레임 워크HashSet을 이용한 중복제거 코드를 모든 타입..
어드레서블에 저장된 리소스를 Load 할 때, 필요할 때마다 Load 할 것인지, 미리 모든 데이터를 Load 해서 저장해놓을 것인지에 대해 내가 구현한 방법을 설명하겠다. 일단 리소스의 용도를 먼저 생각해서, 게임에서 계속 사용해야되는 리소스는 게임이 시작될 때, 전부 불러와서 메모리에 저장해두고 사용하는 방식으로 구현했다.잠깐만 사용하는 리소스는 리소스의 사용이 끝나면, 언로드하는 방식으로 구현했다.구현using System;using System.Collections.Generic;using System.Threading.Tasks;using UnityEngine;public class ResourceManager : Singleton{ [field: SerializeField] public ..
어드레서블 그룹 설정을 할 때, 리소스 순서가 내 마음대로 설정되지 않는 이슈가 있었다. [Unity/C#] 어드레서블 (Addressable) 사용어드레서블에 대해 공부를 하고 현재 진행 중인 프로젝트에 적용시켰다.구현 unit 리소스들은 게임 시작시 데이터를 받아오고, ui들은 필요할 때마다 어드레서블에서 해당 리소스를 동적 생성하deff-dev.tistory.com해결 리소스의 이름과 Enum 요소의 이름을 똑같이 설정하고 경로를 저장하는 IResourceLocation 리스트를 Enum이름에 맞게 순서를 정렬을 해주는 방식으로 위 문제를 해결했다. IResourceLocation 정렬 Enum 형태를 T로 받고 해당 Enum 요소 값을 탐색하면서 리소스 이름과 Enum 요소 값이 같다면 IRes..
어드레서블에 대해 공부를 하고 현재 진행 중인 프로젝트에 적용시켰다.구현 unit 리소스들은 게임 시작시 데이터를 받아오고, ui들은 필요할 때마다 어드레서블에서 해당 리소스를 동적 생성하는 것을 구현했다. 어드레서블에 대해 이해가 잘 되지않는다면 아래의 글을 참고하길 바란다. [Unity/C#] 어드레서블 (Addressable)모바일 게임을 빌드할 때, 게임에 들어가는 모든 리소스를 빌드 파일에 포함시킨다면 어떤 일이 벌어질까? 물론 2D 게임의 경우 리소스 용량이 크지 않아 큰 문제가 되지 않을 수 있다. 하지만 3Ddeff-dev.tistory.com 어드레서블과 비동기 처리에 대해 완벽하게 이해를 하고 코드를 작성한 것이 아니고 공부 목적으로 여러 방법 찾아가면서 구현한 내용이니 비 효율적인 부..
모바일 게임을 빌드할 때, 게임에 들어가는 모든 리소스를 빌드 파일에 포함시킨다면 어떤 일이 벌어질까? 물론 2D 게임의 경우 리소스 용량이 크지 않아 큰 문제가 되지 않을 수 있다. 하지만 3D 게임에서는 이야기가 달라진다. 기본적으로 3D 모델은 용량이 크고 무겁기 때문에, 게임에 필요한 모든 리소스를 빌드 파일에 포함시키면, 빌드 파일의 용량은 급격히 커질 것이다. 예전에는 구글 플레이스토어의 업로드 용량 제한이 200MB였지만, 지금은 2GB로 늘어나 조금은 여유가 생겼다. 하지만 여전히 볼륨이 있는 게임을 업로드하기에는 부담스러운 용량 제한이다. 이 때문에 많은 게임 개발자들은 게임에 들어가는 리소스를 빌드 파일에 포함시키지 않는 방법을 선택하고 있다. 모바일 게임을 설치하고 처음 실행할 때 추..
문제 사항// foreach 루프문은 컬렉션 반복중에 컬렉션 수정이 안된다.foreach (Enemy enemy in SpawnEnemyList){ SpawnEnemyList.Remove(enemy); if(enemy.gameObject.activeSelf) enemy.gameObject.SetActive(false);} foreach문으로 컬렉션을 반복하는 있는 중에 해당 컬렉션을 수정하게 된다면 오류가 발생한다. 해결for (int i = SpawnEnemyList.Count - 1; i >= 0; i--){ Enemy enemy = SpawnEnemyList[i]; SpawnEnemyList.RemoveAt(i); if (enemy.gameObject.active..
지원되는 이벤트 - Unity 매뉴얼이벤트 시스템은 다수의 이벤트를 지원하며 사용자가 작성한 입력 모듈을 통해 한층 더 효율적으로 커스터마이징할 수 있습니다.docs.unity3d.com 유니티에서는 다양한 이벤트를 지원하는데, 게임 오브젝트에 클릭(터치) 이벤트를 적용시킬 때, 이벤트 함수 호출안되는 경우가 있다. using UnityEngine;using UnityEngine.EventSystems;public class UnitTile : MonoBehaviour, IDragHandler, IPointerClickHandler, IEndDragHandler{ public void OnDrag(PointerEventData eventData) { Debug.Log($"타일 드래..
일반화란 ?- 특수한 개념으로부터 공통된 개념을 찾아 묶는 것 이러한 일반화를 이용하는 프로그래밍이 일반화 프로그래밍 ! 일반화 프로그래밍의 일반화 대상 ▶ 데이터 형식 (Data Type)일반화 함수예를 들어 배열을 복사하는 함수가 있다고 해보자. int 형의 배열을 복사할 수 도 있지만 float, string 등 다른 형태의 배열도 복사를 해야 될 때, 해당 함수를 오버로딩해 해결할 것이다. public void CopyArr(int [] arr, int [] targetArr) { for(int i = 0; i 이렇게 된다면, 복사해야 될 배열의 데이터 형식이 늘어나면 늘어날수록 오버로딩 함수는 엄청나게 많아질 것이다.100개의 데이터 타입을 복사해야 한다면 100개의 함수..