목록Unity(유니티)/유니티 공부 (72)
Deff_Dev
문제 사항// 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개의 함수..
게임을 할 때, 게임 설정 창에서 위와 같이 마스터 볼륨, 배경음, 효과음을 슬라이드로 조절하는 것을 볼 수 있을 것이다. Audio Source의 Volume을 조절하면 될까 ? 그렇게 한다면 배경음과 효과음의 Volume을 조절할 수 있을 것이다. 하지만 이 방법으로 구현한다면 게임에 존재하는 모든 Audio Source의 Volume을 조절해줘야 한다.그리고 마스터 볼륨은 배경음과 효과음 소리의 크기와 같이 조절하는 것이 아니라 따로 독립적으로 조절해야 한다.즉, 배경음과 효과음 볼륨을 줄이는 것은 게임의 전체적인 소리를 담당하는 것이 아니다.마스터 볼륨은 게임의 전체적인 소리 출력을 담당하는 기능이기 때문에 배경음과 효과음과는 다른 독립적인 사운드 조절 방식이 필요하다. 그럼 어떻게 해야할까 ?..
확률을 설정할 때, 모든 확률의 합은 반드시 100%가 되어야 한다.하지만 직접 데이터 테이블을 수정하다 보면 이 조건을 지키지 못하는 경우가 생길 수 있다. 확률의 합이 100%보다 작거나 크면 안 되기 때문에, 합이 100%보다 작을 경우 부족한 수만큼 더해서 100%를 맞추고, 100%를 초과할 경우 초과된 만큼 빼주는 로직을 구현했다. 물론, 엑셀을 사용해 확률을 관리할 수도 있지만, 이번 프로젝트에서는 인스펙터를 통해 확률을 입력하기로 했기 때문에 이 기능을 추가하게 되었다. 중요 클래스 - Random - Unity 매뉴얼Random 클래스는 흔히 요구되는 다양한 타입의 랜덤 값을 쉽게 생성할 수 있는 방법을 제공합니다.docs.unity3d.com확률을 표현하는 방법 int 자료형을 사용해..
Json 저장 및 Base-64를 이용한 암호화 관련 글 [Unity/C#] Json 저장 및 base-64를 이용한 암호화/복호화게임 데이터를 저장할 때, Json을 많이 사용하다. 하지만 데이터를 그냥 저장하게 된다면 플레이어가 데이터를 확인하고 임의로 수정할 수 있는 보안 문제가 발생할 수 있습니다. 따라서 Json 데deff-dev.tistory.com 기존에는 Base-64를 이용한 인코딩을 통해 데이터를 저장했으나, 이 방법은 보안성이 부족하여 AES 암호화 알고리즘을 도입하여 데이터 저장 및 불러오기 기능을 보호하도록 개선했다.AES (Advanced Encryption Standard)대칭키 암호화 알고리즘키 값을 가지고 암호화/복호화를 하므로 키 값을 모른다면 데이터를 확인 할 수 없다...
게임 데이터를 저장할 때, Json을 많이 사용하다. 하지만 데이터를 그냥 저장하게 된다면 플레이어가 데이터를 확인하고 임의로 수정할 수 있는 보안 문제가 발생할 수 있습니다. 따라서 Json 데이터를 암호화/복호화하는 과정이 필요하다.데이터 Json 저장/불러오기유니티에서는 간단하게 데이터를 Json으로 변환하고 저장/불러오기를 할 수 있다.using UnityEngine;using System.IO;using System;public class PlayerDataManager : MonoBehaviour{ private string path; private void Awake() { path = Path.Combine(Application.persistentDataPath..
HashSet중복 값을 허용하지 않는 컬렉션 HashSet의 장점중복 제거 : 중복된 값이 자동으로 제거된다.빠른 검색 : 값이 존재하는지 탐색하는데 시간 복잡도가 O(1)이다.빠른 삽입/삭제 : 요소의 삽입/삭제의 평균 시간 복잡도는 O(1)이다.HashSet의 단점순서 없음: HashSet은 요소들의 순서를 보장하지 않는다.메모리 사용: 내부적으로 해시 테이블을 사용하므로, 메모리 사용량이 상대적으로 클 수 있다.가공 성능: 저장된 요소들을 특정 순서로 가공하거나 순회할 때는 성능이 떨어질 수 있다.HashSet은 중복을 제거하고 빠른 검색이 필요한 경우에 적합한 자료구조이다.저장된 요소들을 특정 순서대로 가공하거나 순회해야 하는 경우에는 다른 자료구조를 사용하는 것이 좋다. 클래스 (System...