Unity 프로젝트 이슈 해결 - 범위내 적 타게팅 최적화
·
Unity
수 많은 적을 탐지해 리스트에 담는 경우 뱀서라이크와 They are billions를 혼합한 디펜스 장르의 팀 프로젝트를 진행하던 도 중Sphere collider를 이용해 타워 근처에 접근하는 적을 감지하여 공격하는 코드를 팀원이 작성한 바 있다. using System.Collections.Generic;using UnityEngine;public class TowerTrigger : MonoBehaviour{ [SerializeField] private Transform _towerHead; [SerializeField] private float _rotationSpeed; private List _targetEnemies = new List(); private Transfo..
VisualStudioCode(VSC) 에서 한글 깨짐 이슈
·
C#
Unity 프로젝트 협업 중 팀원의 주석이 및 한글 문자가 깨지는 현상을 발견했따//�̱��� ���� //1. �ı����� �ʵ��� DonDestroy //2. �̹� �ڽ��� �����ϸ� �ı� ??? 확인 결과 Git에도 정상적으로 올라가있고,내 환경에서만 이러한 현상이 발견됐다. 팀원 모두 VisualStudio를 이용하고 있고나는 VisualStudioCode를 이용하고 있다. 원인은 인코딩 불일치라고 한다. VS와 VSC에서 UTF의 인코딩은 다음과 같이 차이가 난다고 한다. VSVSC기본 인코딩UTF-8 with BOMUTF-8 (no BOM)Unity C# 기본 저장Windows 환경에선 UTF-8 with BOM 권장VSCode는 BOM 없이 저장 시 한글 깨짐 발생 가능GitH..
Unity - Raycast (레이캐스트)
·
Unity
Raycast (레이캐스트)한 점(origin)에서 특정 방향(direction)으로 보이지 않는 선(Ray)을 쏴서 충돌체(Collider)와의 교차 여부를 검사하는 기능이다.충돌 지점의 좌표를 이용해 다양한 기능에 활용할 수 있다. 총알 및 투사체 명중 판정마우스 클릭으로 오브젝트 선택AI의 시야 감지캐릭터 이동 지점 탐지카메라 차폐 처리 (벽 뒤 가림) 기본 구조Ray ray = new Ray(origin, direction);if (Physics.Raycast(ray, out RaycastHit hit, 10f)){ Debug.Log($"충돌한 오브젝트: {hit.collider.name}");} origin: 광선의 시작 위치direction: 광선의 방향 (Vector3)distance..
Design Pattern - Observer Pattern (옵저버 패턴)
·
Unity
Observer Patter - 옵저버 패턴객체 간의 1:N(One-to-Many) 관계를 정의하여, 하나의 객체 상태가 바뀌면 그 변화를 자동으로 다른 객체들에 알리는 디자인 패턴이다.Publisher(발행자)가 변경을 통보하면, Subsriber(구독자) 들이 자동으로 반응하는 구조다. 웹 프론트엔드에서도 서버나 전역 상태관리를 구독, 구독 해제 하는 기능을 사용해왔었는데 그것과 매우 유사해 보인다. 여러 객체가 하나의 상태 변화에 동시에 반응해야 할 때 유용하게 사용된다플레이어 체력 감소 → HP UI, 사운드, 로그 시스템 모두 반응게임 종료(GameOver) → 타이머 멈춤, 버튼 활성화, 텍스트 변경데이터 변경 → UI에 즉시 반영이러한 경우, 발행자가 직접 모든 객체를 참조하고 일일이 갱신..
Unity - UGUI : Unity Graphical User Interface
·
Unity
UGUI : Unity Graphical User InterfaceUnity에서 제공하는 컴포넌트 기반 UI 시스템이다.코드 중심이었던 이전 세대의 IMGUI(Immediate Mode GUI)를 대체하는 시각적 구성 중심의 UI 개발 도구다.Hierarchy 기반 UI 트리 구조로 Scene 뷰에서 직접 조절하는 방식으로 사용한다.Canvas를 통해 화면에 출력되고, 이벤트 감지를 위해선 EventSystem이 필수적으로 Hierarchy에 있어야 한다.Script와 쉽게 연동 가능하다. 기본 구조CanvasUI를 그리는 영역이자 루트 오브젝트모든 UI는 반드시 Canvas 하위에 있어야 표시된다. (바로 만들면 Canvas가 자동으로 추가 됨)RectTransformUI 전용 Transform일반 ..
Unity - Spawner에 Singleton Pattern 적용하기
·
Unity
프로젝트 현황 현재 위 사진과 같은 닷지 게임을 유니티로 제작하는 실습 상황에 있다.이전까지 구현사항은 Bullet.csBulletSpawner.csEnemy.csEnemySpawner.csPlayer.csWeapon.csInputComponent.cs이러한 구조를 베이스로 기본적으로 다음과 같은 흐름을 갖고있다. Player → 입력을 받아 **Weapon**을 작동시킴.Weapon → 내부에서 BulletSpawner.Fire() 호출.BulletSpawner → Instantiate()로 총알 생성.Bullet → 충돌 시 자기 자신을 SetActive(false)로 비활성화.EnemySpawner → 코루틴으로 일정 간격마다 적 생성.Enemy → 체력이 0이 되면 사망 처리 후 스패너에게 콜백..
Unity - EventSystem (이벤트 시스템)
·
Unity
event 개념은 이전 C#에서 delegate를 학습하면서 다루었던 적이 있다.지금 바로 이 순간을 위한 빌드업이었다고 해도 과언이 아니다.특정 상황이 발생했을 때 다른 시스템에 알려야하는 순간이 존재하고, 이런 구조를 위해 콜백(Callback), 델리게이트(Delegate), 이벤트(Event) 가 존재한다.그리고 Unity에는 UnityEvent 라는 것이 존재한다. 델리게이트 (Delegate)메서드를 변수처럼 저장하고 호출할 수 있는 타입으로, 메서드의 참조(주소)를 담을 수 있는 콜백 구조다.public delegate void OnPlayerDie(); // 메서드 시그니처 정의public class Player{ public OnPlayerDie onPlayerDie; // 델리게..
Design Pattern - Singleton Pattern (싱글톤 패턴)
·
C#
싱글톤 패턴 (Singleton Pattern)프로그램 전체에서 단 하나의 인스턴스만 존재하도록 보장하고, 어디에서든 그 인스턴스에 접근할 수 있게 하는 디자인 패턴이다.프로젝트 내의 전역 관리자 같은 역할을 하는 구조다.인스턴스가 하나만 생성됨 (유일성 보장)static 변수를 통해 어디서든 접근 가능 (전역 접근성)필요할 때 자동으로 생성되며, 이미 있으면 새로 만들지 않음주로 게임에서 상태 관리나 시스템 매니저 역할에 사용Unity에서는 씬이 분리되어 있고 여러 스크립트가 서로 다른 오브젝트 위에서 동작한다.이때 "게임 전체 상태"를 한 곳에서 관리해야하는 경우가 있다.씬이 바뀌어도 유지돼야 하는 정보 (플레이어 점수, 설정값, 능력치 등)전역적으로 접근해야 하는 시스템 (사운드, 데이터, UI 등..
Graphics - Redering, Draw Call, Batching, UV Map
·
Graphics
렌더링 (Rendering)CPU가 GPU에게 화면에 그릴 데이터를 전달하고, GPU가 이를 실제 픽셀로 그리는 과정을 말한다.CPU → (Draw Call) → GPU → (Rasterize) → 화면 출력 CPU는 게임 오브젝트, 메시, 머테리얼, 텍스텨 등 그려야 할 데이터와 명령을 GPU로 전송하고GPU는 이를 기반으로 픽셀 단위로 이미지를 생성한다. CPU 단계에서 "무엇을, 어떻게 그릴지" 를 결정하는 것이다. GPU 내부 처리 단계를 조금 더 세분화하면 아래와 같다.Vertex Shader (정점 변환 및 속성 처리)Primitive Assembly / Clipping (삼각형 구성 및 화면 밖 제거)Rasterization (삼각형 → 픽셀화)Fragment/Pixel Shader (텍스..
Design Pattern - Adapter Pattern (어댑터 패턴)
·
C#
어댑터 패턴 (Adpater Pattern)서로 다른 인터페이스를 가진 클래스들을 함께 동작하도록 연결하는 디자인 패턴이다.기존 시스템을 건드리지 않고, 새로운 클래스나 라이브러리를 기존 구조에 자연스럽게 통합할 때 유용하다. 가장 직관적인 비유는 플러그 변환기 다.220V 콘센트에 110V 기기를 연결하려면 어댑터가 필요하듯,소프트웨어에서도 기존 코드의 인터페이스와 새 클래스의 인터페이스가 맞지 않을 때 이를 변환해주는 역할을 한다. 기본 구성은 다음 세가지로 이루어진다.Target (목표 인터페이스)클라이언트가 기대하는 인터페이스Adaptee (적응될 클래스)기존 시스템과 호환되지 않는 외부 클래스Adapter (어댑터)Target 인터페이스를 구현하면서 내부적으로 Adaptee를 호출하여 변환 ..