Unity 썸네일형 리스트형 [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 .. 더보기 [Unity 유니티] 3D 카메라 부드럽게 이동하기 - Vector3.SmoothDamp Unity에서 카메라를 부드럽게 이동하려면 Vector3.SmoothDamp를 사용하는 것이 좋다.이 함수는 시작점에서 목표 지점까지의 이동을 부드럽게 보간해준다. 카메라 이동이나 객체 추적 시 매우 유용하다.Vector3.SmoothDamp란?SmoothDamp는 일정 속도로 목표 위치에 도달하도록 값을 점진적으로 변화시키는 함수다.Vector3 SmoothDamp( Vector3 current, // 현재 위치 Vector3 target, // 목표 위치 ref Vector3 currentVelocity, // 현재 속도 (참조값으로 전달) float smoothTime, // 부드러움 시간 float maxSpeed = Mathf.In.. 더보기 [Unity 유니티] 람다식 AddListener for문 안됨 - 클로저 (Closure) 문제 AddListener는 Unity에서 UI 버튼이나 기타 이벤트가 발생할 때 특정 함수를 호출하기 위해 주로 사용하는 기능이다. 하지만 AddListener를 반복문, 특히 for문과 함께 사용할 때는 주의해야 한다. 잘못 사용할 경우 의도치 않은 결과를 초래할 수 있기 때문이다.문제점: 클로저(Closure)와 캡처링(Capturing)의 혼란for문을 통해 AddListener를 반복해서 호출할 때, 각 반복마다 AddListener가 현재의 루프 변수를 '캡처'하는데, 이로 인해 예상치 못한 버그가 발생할 수 있다. 이는 C#의 람다식이 클로저를 통해 외부 변수를 캡처하는 방식 때문이다.예를 들어, 아래와 같은 코드가 있다고 가정하자void Start(){ for (int i = 0; i D.. 더보기 [Unity 유니티] 유니티에서 Json으로 데이터 관리하기 - AES 암호화 / 복호화 (3) Json 데이터 암호화 / 복호화Json 파일로 데이터를 저장하는 것은 간편하지만, 파일이 그대로 노출되면 데이터가 쉽게 읽힐 수 있다. 민감한 데이터는 암호화하여 저장하는 것이 좋다. 이번 포스팅에서는 Unity에서 Json 파일을 암호화하여 저장하고 불러오는 방법을 소개한다.1. AES 암호화 설정하기Unity에서는 System.Security.Cryptography 네임스페이스를 이용해 AES 암호화를 쉽게 구현할 수 있다. 아래 예시는 Json 데이터를 AES 방식으로 암호화해 파일에 저장하는 코드다.using System;using System.IO;using System.Security.Cryptography;using System.Text;using UnityEngine;[System.Ser.. 더보기 이전 1 2 3 다음