목록Unity(유니티) (72)
Deff_Dev
게임을 할 때, 게임 설정 창에서 위와 같이 마스터 볼륨, 배경음, 효과음을 슬라이드로 조절하는 것을 볼 수 있을 것이다. 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...
이슈 사항 X축이 90도로 회전된 상태에서 상하, 좌우로 회전 시킨다면 x축만 회전되고, X축이 0도, 180도일 때는 상하는 X축 좌우는 Z축이 회전된다. 이 큐브를 스크립트에서 제어를 할 때, 값을 어떻게 넣어야 할까 ?해결이 문제를 해결하기 위해서는 유니티에서 오브젝트가 회전하는 방법에 대해 알고 있어야 한다. 회전할 때는 인스펙터 창에서의 Vector값을 이용하여 회전하는 것이 아닌 쿼터니언 값으로 회전하게 된다. Quaternion * Vector를 이용하여 회전시킬 값을 구하는 것이다. 여기서 Quaternion는 회전 시킬 값을 의미하고 Vector는 회전을 적용시킬 오브젝트의 회전 값을 의미한다.Quaternion currentRot = transform.rotation;Quaternion..
FSM유한 상태 기계 (Finite State Machine, FSM)유한한 갯수의 상태들로 구성된 기계 및 패턴을 만한다.상태와 상태 간의 전환을 기반으로 동작하는 동작 기반 시스템구성 요소상태 (State) : 시스템이 취할 수 있는 다양한 상태전환 조건 (Transition Condition) : 상태 간 전환을 결정하는 조건동작 (Action) : 상태에 따라 수행되는 동작 또는 로직동작 원리초기 상태에서 시작하여 입력 또는 조건에 따라 상태 전환을 수행상태 전환은 전환 조건을 충족할 때 발생하며, 전환 조건은 입력, 시간, 조건 등으로 결정상태 전환 시 이전 상태의 종료 동작과 새로운 상태의 진입 동작을 수행예시 : 플레이어 상태상태 : 정지 상태, 이동 상태, 점프 상태 등전환 조건 : 이동 ..
public void StartNewStage() { // 위치 설정 transform.position = GameManager.Instance.StageManager.StartWaypoint.position; stateMachine.ChangeState(stateMachine.ChasingState); }게임을 시작하면 플레이어가 지정한 위치에서 시작하는 기능을 만들 때, 위와 같이 코드를 작성했다. 하지만 테스트를 해보니 플레이어가 해당 위치로 돌아가지 않았다. 한 프레임 당 실행을 했을 땐, 제대로 위치가 설정 됐지만 그냥 실행할 때는 시작 위치로 갔다가 다시 현재 위치로 돌아오는 이슈가 발생했다. 시작위치로 이동했다가 다시 돌아가는 이슈이므로 위의 코..