본문 바로가기

[ Unity ]/- 유니티 실습131

유니티 2D AI 스폰 ▣ 코드 설명 enemyPrefab: 스폰할 적 AI 프리팹을 지정합니다. Unity Editor에서 스폰할 적 프리팹을 드래그해서 넣어주면 됩니다.spawnRangeX, spawnRangeY: 적이 스폰될 X축과 Y축 범위를 설정합니다. 이 값들은 적이 무작위로 스폰될 영역을 결정합니다.enemyCount: 스폰할 적의 수를 설정합니다.SpawnEnemies(): Start() 메서드에서 호출되며, 이 메서드가 적들을 무작위로 스폰합니다. Random.Range를 사용해 X와 Y 좌표를 무작위로 생성한 후, Instantiate() 메서드를 통해 적을 스폰합니다.OnDrawGizmosSelected(): Gizmos를 사용해 Scene 뷰에서 적이 스폰될 범위를 시각적으로 확인할 수 있게 합니다.  D.. 2024. 9. 5.
유니티 2D AI 추적시스템 ▣ 코드 설명 player: 플레이어 캐릭터의 위치를 알아내기 위해 Transform을 참조합니다. Unity에서 Transform은 객체의 위치, 회전, 크기를 나타냅니다.moveSpeed: 적 캐릭터가 플레이어를 따라갈 때의 속도입니다. 이 값을 조절하면 적의 이동 속도가 변경됩니다. detectionRange: 적이 플레이어를 감지할 수 있는 범위를 설정하는 변수입니다. 이 범위 안에 플레이어가 들어오면 적이 추적을 시작합니다.Update(): Unity에서 매 프레임마다 호출되는 메서드로, AI가 매 순간 플레이어의 위치를 추적하고 반응하는 로직을 여기에 작성합니다.Vector2.Distance: 적과 플레이어 사이의 거리를 계산하는 데 사용됩니다. detectionRange와 비교하여 플레이어가.. 2024. 9. 5.
유니티 오브젝트 풀링 ▣ GunManager:Start(): 오브젝트 풀을 초기화하고, bulletPrefab을 미리 poolSize만큼 생성하여 리스트에 넣고 비활성화합니다. Update(): 마우스 위치를 확인하고, 플레이어가 마우스를 향해 회전합니다. 마우스 클릭 시 총알을 풀에서 꺼내 발사합니다. GetBulletFromPool(): 풀에서 비활성화된 총알을 찾아 반환합니다. FireBullet(): 총알을 발사 위치로 이동시키고, 방향을 설정한 후 속도를 부여해 발사합니다.    ▣ Bullet:OnTriggerEnter2D(): 총알이 Enemy 또는 Obstacle과 충돌하면 GunManager의 ReturnBulletToPool()을 호출하여 총알을 다시 풀로 반환하고 비활성화합니다. 총알 풀로 반환: 총알이 .. 2024. 9. 4.
유니티 struct와 class의 차이 ▣ Struct와 Class의 차이 C#에서 struct와 class는 둘 다 사용자 정의 데이터 타입을 정의하는 데 사용됩니다.  그러나 메모리 할당 방식, 성능, 사용 사례 등에서 중요한 차이점이 있습니다. ▣ Struct를 사용하는 경우: 작은 크기의 데이터를 다룰 때 (예: 2D 좌표, 색상 데이터) 불변성(Immutable)을 유지해야 하는 경우 값 타입이 필요할 때 (데이터를 복사해서 사용해야 하는 경우) ▣ Class를 사용하는 경우: 복잡한 데이터 구조나 상태를 유지해야 할 때 상속과 다형성(Polymorphism)을 사용해야 할 때 참조에 의한 호출이 필요할 때 (데이터의 크기가 큰 경우)      https://docs.unity3d.com/ScriptReference/MonoBehav.. 2024. 9. 2.
유니티 Array, List, Dic , Call by Reference, Call by Value ▣설명: 동일한 타입의 데이터가 연속적으로 메모리에 저장되는 자료구조입니다. 특징: 고정 크기: 배열의 크기는 선언 시 고정됩니다. 빠른 접근: 인덱스를 통해 빠르게 접근할 수 있습니다. 단점: 크기가 고정되어 있어 유연성이 떨어집니다. 예시: int[] numbers = new int[5]; https://learn.microsoft.com/en-us/dotnet/api/system.array?view=net-8.0 Array Class (System)Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the base class for all arrays in the common lan.. 2024. 8. 31.
유니티 메모리 구조 (스택, 힙, 데이터, 정적변수, 지역변수, 전역변수) ▣ Unity C# 메모리 구조 Unity에서 C#을 사용하여 개발할 때, 메모리 구조는 매우 중요한 역할을 합니다. C#의 메모리 구조는 일반적인. NET 메모리 관리 방식을 따르며, 크게 다음과 같은 세 가지 주요 영역으로 나눌 수 있습니다: 1. 스택(Stack) 설명: 스택은 함수 호출 시 생성되는 지역 변수와 함수 호출 정보를 저장하는 영역입니다. 스택은 LIFO(Last In, First Out) 방식으로 동작하며, 함수가 종료되면 자동으로 메모리에서 해제됩니다. 용도: 지역 변수, 함수의 매개변수, 함수 호출 정보가 저장됩니다. 특징: 메모리 할당과 해제가 매우 빠르며, 스택의 크기는 제한적입니다.2. 힙(Heap) 설명: 힙은 동적으로 할당된 메모리가 저장되는 영역으로, 객체 인스턴스가 여.. 2024. 8. 31.
유니티 Delegate ▣ 델리게이트(Delegate)는 C#에서 매우 중요한 개념으로, 특정 메서드를 참조할 수 있는 형식을 의미합니다. 이를 통해 메서드를 변수처럼 다룰 수 있으며, 메서드를 매개변수로 전달하거나, 런타임에 어떤 메서드를 호출할지 동적으로 결정할 수 있습니다. ▣  델리게이트의 사용 목적: 동작의 캡슐화: 델리게이트를 사용하면 함수 자체를 변수처럼 전달할 수 있어, 실행할 코드의 일부를 런타임에 결정할 수 있습니다. 이벤트 처리: 이벤트 시스템에서 자주 사용됩니다. 예를 들어 버튼 클릭 시 호출할 메서드를 델리게이트로 지정할 수 있습니다. 콜백 메서드: 비동기 작업이 끝났을 때 호출할 메서드를 지정하는 콜백에 사용됩니다. ▣ 델리게이트의 사용 상황: 코드의 재사용성을 높이기 위해 여러 객체가 동일한 작업을 .. 2024. 8. 31.
유니티 Lambda ▣ 람다식(Lambda Expression)이란? 람다식은 익명 함수를 생성하는 간결한 방법입니다.  C#에서 메서드를 정의하지 않고도 함수나 연산을 간단하게 표현할 수 있습니다.  람다식은 주로 델리게이트(Delegate) 또는 이벤트(Event)와 함께 사용됩니다. ▣ 람다식의 기본 형태는 다음과 같습니다:(매개변수) => 식;  ▣ 람다식의 기본 구조 매개변수: 메서드처럼 여러 개의 매개변수를 가질 수 있습니다. 매개변수가 하나일 경우 괄호 ()를 생략할 수 있습니다. 화살표 연산자 (=>): 매개변수와 본문을 구분합니다. 본문: 단일 식일 수 있으며, 이 식의 결과가 반환됩니다. 여러 줄의 코드가 필요한 경우 중괄호 {}를 사용하고, 명시적으로 return 키워드를 사용해야 합니다. ▣ Func는.. 2024. 8. 28.
유니티 interface ▣ 인터페이스(interface)는 C#에서 클래스 또는 구조체가 구현해야 하는 멤버들의 집합을 정의하는 데 사용되는 계약(contract)입니다. 인터페이스는 메서드, 속성, 이벤트, 인덱서 등의 시그니처만을 포함하며,실제 구현은 제공하지 않습니다. 이를 통해 서로 다른 클래스들이 동일한 기능을 구현하도록 강제할 수 있습니다. ▣  인터페이스를 사용하는 이유 일관성 유지: 인터페이스를 통해 다양한 클래스들이 동일한 메서드나 속성을 구현하도록 강제할 수 있습니다. 다형성 지원: 인터페이스 타입을 사용하여 서로 다른 클래스의 객체를 동일한 방식으로 다룰 수 있습니다. 유연한 설계: 인터페이스를 활용하면 코드의 결합도를 낮추고, 더 유연하고 확장 가능한 설계를 할 수 있습니다. 다중 상속의 대안: C#은 클.. 2024. 8. 13.
유니티 abstract ▣ abstract 키워드는 C#에서 객체 지향 프로그래밍(OOP)의 중요한 개념인 추상화(abstraction)를 구현하는 데 사용됩니다. 추상 클래스와 추상 메서드를 정의할 때 사용되며, 구체적인 구현을 제공하지 않고, 파생 클래스(자식 클래스)에서 반드시 구현해야 하는 멤버를 선언하는 데 활용됩니다. ▣ abstract 키워드의 사용 이유 공통 인터페이스 제공: 추상 클래스는 자식 클래스들이 공통으로 가져야 할 메서드나 속성을 정의합니다. 그러나 그 구현은 자식 클래스에 따라 달라질 수 있습니다. 이를 통해 코드의 일관성과 가독성을 높일 수 있습니다. - 강제 구현: 추상 메서드를 선언하면, 이 메서드를 상속받는 모든 자식 클래스는 반드시 해당 메서드를 구현해야 합니다. 이를 통해 코드의 일관성을 .. 2024. 8. 13.
유니티 virtual, override ▣ 부모 타입에 객체에 Dog를 참조하여도 부모메소드가 호출됩니다.     ▣ virtual과 override 키워드는 C#에서 상속 관계를 활용할 때 주로 사용되는 키워드입니다. 이들은 부모 클래스와 자식 클래스 간의 메서드 재정의(Overriding) 작업에 중요한 역할을 합니다. ▣  virtual 키워드 정의: 부모 클래스에서 메서드나 속성을 정의할 때, 해당 메서드나 속성을 자식 클래스에서 재정의할 수 있도록 허용하는 키워드입니다. 언제 사용되는가: 부모 클래스에서 정의된 메서드가 자식 클래스에서 재정의(override)될 가능성이 있는 경우 사용합니다.▣  override 키워드 정의: 자식 클래스에서 부모 클래스의 virtual로 선언된 메서드나 속성을 재정의할 때 사용하는 키워드입니다. 언.. 2024. 8. 13.
유니티 base 키워드 ▣ base 키워드는 C#에서 객체 지향 프로그래밍의 상속(inheritance) 개념을 활용할 때 주로 사용됩니다.base 키워드는 부모 클래스(또는 기본 클래스)의 멤버(필드, 메서드, 속성 등)에 접근할 수 있도록 해줍니다.이를 통해 자식 클래스에서 부모 클래스의 기능을 확장하거나, 부모 클래스의 기능을 재사용할 수 있습니다.그리고 부모클래스를 상속해야합니다.   https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/base base 키워드 - C# referenceC#의 파생 클래스 내에서 기본 클래스의 멤버에 액세스하는 데 사용되는 base 키워드에 대해 알아봅니다.learn.microsoft.com 2024. 8. 13.
유니티 예외 처리 ▣ 구체적인 예외 클래스 FormatException 문자열을 숫자나 날짜 등 특정 형식으로 변환할 때 형식이 맞지 않을 경우 발생합니다. 예시: int.Parse("abc"); IndexOutOfRangeException 배열이나 컬렉션의 인덱스가 범위를 벗어날 때 발생합니다. 예시: int[] array = new int[5]; int value = array[10]; NullReferenceException 객체가 null 참조일 때 해당 객체의 멤버에 접근하려 할 때 발생합니다. 예시: object obj = null; obj.ToString(); InvalidOperationException 메서드 호출이 객체의 현재 상태와 적합하지 않을 때 발생합니다. 예시: IEnumerator enumer.. 2024. 8. 8.
유니티 메소드 ▣ ref 키워드는 변수가 메서드에 전달되기 전에 반드시 초기화되어 있어야 합니다. 메서드 내에서 이 변수의 값을 변경하면, 호출자에게도 변경된 값이 전달됩니다. ▣ out 키워드는 변수가 메서드에 전달될 때 초기화될 필요가 없습니다. 메서드 내에서 이 변수를 반드시 초기화해야 하며, 호출자는 이 초기화된 값을 사용할 수 있습니다.  ▣ 가변매개변수는 가변으로 변수를 배열에 받아오는 형식을 뜻합니다.   ▣ 명명된 변수를 사용할 때 맨 앞에 있는 매개변수가 Default로 지정되어 있어야 뒤에 있는 값을 명명된 변수로 사용가능합니다.   https://docs.unity3d.com/ScriptReference/ Unity - Scripting API:Welcome to the Unity Scripting.. 2024. 8. 8.
유니티 TileMap https://arks.itch.io/dino-characters Dino Character Sprites by Arks💢4 Colorful and simple Dino Charactersarks.itch.io   https://bagong-games.itch.io/cozy-island-tileset Hana Caraka - Cozy Island Topdown Tileset by Bagong GamesComplete 16x16 tileset for your top down gamesbagong-games.itch.io  https://docs.unity3d.com/kr/2023.2/Manual/class-Tilemap.html Tilemap 컴포넌트 레퍼런스 - Unity 매뉴얼Tilemap 컴포넌트는.. 2024. 7. 25.
유니티 마우스 위치로 총알 발사 ▣ Player 오브젝트에 Gun 오브젝트를 추가하고 Sprite Renderer와 GunManager라는 스크립트를 추가합니다.   ▣ 그리고 Gun안에 BulletPos라는 이름에 오브젝트를 상속하고 총알이 발사되는 위치로 이동합니다.   ▣ GunManager 스크립트로 가서 메인카메라, 마우스위치, 총알프리팹, 총알 나가는 위치, 총 쏘는 여부를 나타내는 변수, 시간, 총 쏘는 딜레이타임변수를 각각 선언합니다. 그리고 Start() 함수에서 mainCamera라는 대입 합니다.   ▣ 그리고 화면공간에 마우스 위치를 가져오는 코드, 방향을 구하는 코드, 수평축으로부터 한 점까지 각도를 구하는 함수를 각각 작성하고 총 회전값에 대입합니다. 딜레이 시간에 따라 총알이 복제되는 코드까지 완성합니다.  .. 2024. 7. 11.
유니티 애니메이션 스프라이트 ▣ 애니메이션 에셋을 가져오고 스프라이트를 선택한 다음 Sprite Mode와 Filter Mode를 지정하고 Sprite Editor을 선택합니다.   ▣ Silce메뉴를 선택하고 Type을 Automatic을 선택한 다음 Slice로 자르기를 진행합니다. 스프라이트 한 개를 선택하여 Pivot 중심을 변경할 수도 있고 스프라이트 자르는 부분을 직접 조절도 할 수 있습니다.   ▣ 오른쪽마우스를 클릭하여 Create에서 Animation에 Animation과 Animator Controller를 생성합니다.   ▣ Scene에 Player오브젝트를 생성하고 Animator Component를 추가한 다음 해당 애니메이션에 넣어 준 다음에 직접 프레임 별로 스프라이트를 넣어 애니메이션을 제작하고 추가할 .. 2024. 7. 10.
유니티 night skybox https://docs.unity3d.com/kr/2018.4/Manual/class-Skybox.html 스카이박스 - Unity 매뉴얼스카이박스(Skyboxes) 는 전체 씬을 둘러싸는 래퍼로 지오메트리 너머의 월드가 어떻게 생겼는지를 보여줍니다.docs.unity3d.com https://assetstore.unity.com/packages/2d/textures-materials/sky/urban-night-sky-134468 Urban Night Sky | 2D 하늘 | Unity Asset StoreElevate your workflow with the Urban Night Sky asset from Kendall Weaver. Browse more 2D 텍스처 및 소재 on the Unity .. 2024. 1. 21.
유니티 ai NavMeshAgent ▣ 먼저 Packages에서 AI Navigation를 추가합니다.   ▣ Zombie 오브젝트에 Nav Mesh Agent Component 추가합니다.  ▣ Nav Mesh Agent 컴포넌트는 Unity에서 AI 캐릭터의 경로 탐색을 담당하는 주요 컴포넌트입니다. 이 컴포넌트는 NavMesh(내비게이션 메시)를 기반으로 캐릭터가 장애물을 피하면서 목적지까지 이동할 수 있게 도와줍니다. 주로 적 AI, NPC, 유닛 등의 경로 탐색을 구현할 때 사용됩니다. ▣ Nav Mesh Agent 개념 설명 Nav Mesh Agent는 미리 설정된 NavMesh 상에서 이동하며, 다음과 같은 기능을 제공합니다: 목적지 설정: NavMesh 상의 목표 지점까지 이동합니다. 장애물 피하기: 경로 상에 있는 장애물을.. 2024. 1. 20.
유니티 배경음악, 레벨유지 ▣ 빈오브젝트를 생성하고 SoundManager라는 이름으로 지정하고 Audio Source Component를 두 개를 추가합니다. 배경음악, 효과음을 따로 플레이하여 관리하기 위함입니다. https://docs.unity3d.com/kr/2020.3/Manual/class-AudioSource.html 오디오 소스 - Unity 매뉴얼 오디오 소스(Audio Source) 는 씬에서 오디오 클립을 재생합니다. 이 클립은 오디오 리스너 또는 오디오 믹서를 통해 재생 가능합니다. 오디오 소스는 모든 종류의 오디오 클립을 재생할 수 있으며, docs.unity3d.com ▣ SoundManager 스크립트에 먼저 SounManager를 instace 싱글톤을 시켜서 모두가 접근할 수 있게 코드를 작성하고 .. 2024. 1. 19.
유니티 raycast, 총알효과 ▣ 레이케스트 장면의 모든 충돌체에 대해 지점에서 origin방향으로 direction길이의 광선을 투사합니다. maxDistance 충돌 생성에 관심이 없는 충돌체를 필터링하기 위해 선택적으로 LayerMask를 제공할 수 있습니다. 지정하면 queryTriggerInteraction트리거 충돌체가 적중을 생성하는지 여부 또는 전역 Physics.queriesHitTriggers 설정을 사용할지 여부를 제어할 수 있습니다. ▣ public static bool Raycast ( Vector3 원점, Vector3방향, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryT.. 2024. 1. 19.