본문 바로가기

Unity

[Unity 유니티] Random 클래스 모호한 참조 오류 - UnityEngine.Random, System.Random 사이에 모호한 참조입니다 / 'Random' is an ambiguous reference between 'UnityEngine.Random' and 'System.Random' (CS0104) Random 클래스를 사용할 때 System 네임 스페이스를 사용중이라면 아래와 같은 오류가 표기된다.UnityEngine.Random, System.Random 사이에 모호한 참조입니다.또는'Random' is an ambiguous reference between 'UnityEngine.Random' and 'System.Random' (CS0104)● 해결방법위와 같은 오류가 발생하는 이유는 유니티에서 제공하는 Random 클래스와 System의 Random 클래스의 이름이 중복되기 때문이다.따라서 유니티에서 제공하는 Random 함수를 이용하라고 네임스페이스 부분에 정의해주면 해결된다.using Random = UnityEngine.Random;위 코드를 스크립트 맨 윗부분에 적으면 간단하게 해결.. 더보기
[Unity 유니티] Error Unity AndroidJavaException: java.lang.ClassNotFoundException: com.google.games.bridge.HelperFragment / 최신 GPGS v2 오류 해결 방법 프로젝트를 모바일에서 테스트 중 로그캣에 이런 오류가 나오면서 GPGS 함수들이 실행되지 않았다.Error Unity AndroidJavaException: java.lang.ClassNotFoundException: com.google.games.bridge.HelperFragment1시간 내내 여러 챗봇들(GPT, Grok, Gemini, Sonnet 등등)을 이용해 해결해보려 했지만 전부 실패...결국 구글링을 통해서 이것저것 시도해 보던 중 해결 방법을 찾았다.Assets\GeneratedLocalRepo\GooglePlayGames\com.google.play.games\Editor\m2repository\com\google\games\gpgs-plugin-support 폴더에 있는 gpgs-p.. 더보기
[Unity 유니티] Orientation 화면 회전 / Portrait 세로 Landscape 가로 1. Portrait - 세로2. Portrait Upside Down - 세로 (위아래 반대)3. Landscape Left - 가로 (왼쪽으로 회전)4. Landscape Right - 가로 (오른쪽으로 회전)5. Auto Rotation - 자동회전Orientation 설정 방법File > Build Settings > Player Settings > Resolution and Presentation > Default Orientation필요에 따라 Landscape Left, Landscape Right, Auto Rotation 등으로 변경할 수 있다.Auto Rotation을 선택한 경우, 추가 옵션이 나타나며 허용할 방향을 개별적으로 체크할 수 있다. 예를 들어, Portrait와 Lands.. 더보기
[Unity 유니티] 유니티 클래스(Class) / 구조체(Struct) 차이점 유니티에서 프로그래밍을 하다 보면 클래스(Class)와 구조체(Struct) 중 어떤 것을 사용할지 고민하게 된다.이 둘은 비슷해 보이지만 중요한 차이점이 있다.클래스와 구조체의 주요 차이점값 타입 vs 참조 타입구조체는 값 타입이다. 데이터를 직접 복사하여 사용하며, 메모리 스택에 저장된다.클래스는 참조 타입이다. 데이터의 주소를 참조하며, 메모리 힙에 저장된다.상속구조체는 상속을 지원하지 않는다.클래스는 상속이 가능하다.기본 생성자구조체는 기본 생성자를 제공하지 않으며, 매개변수가 없는 생성자를 직접 정의할 수 없다.클래스는 기본 생성자가 자동으로 생성된다.사용 목적구조체는 간단한 데이터 저장이나 계산에 적합하다.클래스는 복잡한 데이터 구조나 객체 지향 프로그래밍에 적합하다.코드 예시- 클래스usin.. 더보기
[Unity 유니티] 유니티 인스펙터 Dictionary 안나옴 - Serializable 직렬화 문제와 해결 방법 (SerializableDictionary) 유니티에서 Dictionary 타입은 매우 유용하지만, 인스펙터에 기본적으로 표시되지 않는다. 이는 유니티의 기본 직렬화 시스템이 Dictionary를 지원하지 않기 때문이다.유니티의 직렬화 시스템은 System.Serializable 속성을 사용하여 필드를 직렬화하지만, 배열(Array), 리스트(List) 등 일부 자료형만 지원한다. Dictionary는 키-값 쌍을 저장하기 위해 복잡한 구조를 가지기 때문에 기본적으로 직렬화되지 않는다.해결 방법Dictionary를 인스펙터에서 사용할 수 있게 하려면 커스텀 솔루션을 사용해야 한다. SerializableDictionary는 커스텀 클래스나 패키지를 만들어 사용하는 방법이다.using System;using System.Collections.Gene.. 더보기
[Unity 유니티] 2D 피격 이펙트 구현하기 2D 게임에서 적이나 플레이어가 피격될 때의 효과는 게임의 몰입감을 높이는 중요한 요소다. 이번 글에서는 간단한 2D 피격 이펙트를 Unity에서 구현하는 방법을 소개한다.1. 간단한 코드 구현이 코드를 사용하면 피격 시 스프라이트가 하얗게 변했다가 원래대로 돌아오게 된다.using UnityEngine;public class HitEffect : MonoBehaviour{ private SpriteRenderer spriteRenderer; private Color originalColor; public Color hitColor = Color.white; // 피격 시 스프라이트 색상 public float effectDuration = 0.1f; // 효과 지속 시간 pr.. 더보기
[Unity 유니티] 메모리 변수 변조 방지 - 치트 엔진 막기 메모리 변수 변조 방지 방법게임 개발에서는 클라이언트 메모리를 변조해 변수 값을 조작하는 행위를 방지하는 것이 중요하다. 이를 방치하면 게임 밸런스가 무너지고, 사용자 경험에 부정적인 영향을 미칠 수 있다. 이번 포스팅에서는 Unity에서 메모리 변수 변조를 방지하기 위한 몇 가지 방법을 소개한다.1. 변수 값 암호화변수 값을 그대로 메모리에 저장하지 않고 암호화해 저장하면, 메모리 변조 툴로 값을 쉽게 알아내기 어렵다. 예를 들어, 점수(score)를 암호화해 저장하는 방법은 다음과 같다.public class SecureValue{ private int encryptedValue; private int encryptionKey; public SecureValue(int initialV.. 더보기
[Unity 유니티] 소프트코딩(Soft Coding)이란? 소프트코딩이란 무엇인가?소프트코딩(Softcoding)은 소스코드에 하드코딩된 값을 제거하고, 외부 파일, 데이터베이스 또는 설정 파일을 통해 값을 관리하는 방법이다. 이를 통해 유연성과 유지보수성을 높일 수 있다. 간단히 말해, 코드를 수정하지 않고도 동작을 변경할 수 있도록 만드는 것이다.쉽게 말해, 코드에 직접 값을 넣기보다 변수나 상수를 이용해 유지보수를 쉽게 하는 것이다.소프트코딩의 주요 장점유연성프로그램 실행 중에도 외부 데이터를 통해 동작을 변경할 수 있어 다양한 상황에 적응하기 쉽다.확장성새로운 요구사항이 생겼을 때 코드 수정 없이 설정만 추가하거나 수정하여 기능을 확장할 수 있다.재사용성특정 로직을 소프트코딩으로 구현하면 다양한 프로젝트나 상황에서 재사용하기 용이하다.// 하드코딩int .. 더보기