728x90

GameDevelop 96

Unity 트러블슈팅 – TakeDamage가 호출되지 않음

문제 상황PlayerAttackState에서 TakeDamage()가 호출되지 않음"공격받는중" 로그가 뜨지 않음 오류 발생 원인 추론OverlapSphere 감지 자체가 안 됐을 수 있음Layer 설정이 안 돼있을 수 있음Collider를 못 찾았거나, GetComponent()가 null일 수 있음Cooldown 로직 문제로 아예 공격을 안 하고 있을 수 있음 디버깅 확인때리는중 → 플레이어 AttackState로 진입했다.적 감지 개수: 1 → OverlapSphere로 적 1개 감지했다.Enemy 컴포넌트를 못 찾음 → GetComponent()가 null이다 원인Enemy 오브젝트에 Collider 없음OverlapSphere는 Collider 기준으로 감지Collider가 없으면 감지만 되고..

[Unity] OverlapSphereNonAlloc 등 을 이용한 OverlapSphere 최적화

기본 개념Collider[] hits = Physics.OverlapSphere(position, radius, LayerMask.GetMask("Enemy")); 지정한 구체 범위 안의 Collider들을 감지배열로 리턴 → 범위 안 적이 몇 명인지 알 수 있음하지만 매 프레임 돌리면 성능 문제 발생 문제점Collider 오브젝트가 많아질수록 느려짐GC Alloc 발생 (배열 새로 생성 → 메모리 낭비 → 렉 유발)모바일/저사양 환경에서는 프레임 드랍 위험 최적화 방법1. LayerMask 필터링감지할 레이어만 지정해서 불필요한 체크 줄이기LayerMask enemyMask = LayerMask.GetMask("Enemy");Collider[] hits = Physics.OverlapSphere(po..

[Unity] SerializeField + 프로퍼티 패턴

문제public float moveSpeed;외부에서 값 수정 가능 → 보안/캡슐화 x 해결 [SerializeField] private float moveSpeed = 3f;[SerializeField] private float attackRange = 2f;public float MoveSpeed => moveSpeed;public float AttackRange => attackRange;[SerializeField] private :Inspector에서 값 수정 가능 + 코드 외부에서는 직접 수정 불가public 프로퍼티 (읽기 전용) :외부에서 읽기만 가능, 값 변경은 막음 정리캡슐화 보장 : 내부 값은 보호Inspector 노출 : 에디터에서 값 조정 O읽기 전용 프로퍼티 : 외부는 보기만 가능

Unity FSM 구조 – 방치형 RPG에 맞게 단순화

기본 구조Player : PlayerStateMachine 보유, FSM 기반 (Idle, Move, Attack)Enemy : EnemyStateMachine 보유, FSM 기반 (Idle, Chase, Attack)StateMachine : ChangeState()로 상태 전환 관리ScriptableObject : Player, Enemy 스탯 데이터 분리 방치형 RPG에 맞게 수정직접 조작 불필요 → 자동화 필요Player FSMIdle (대기)Move (앞으로 자동 이동)Attack (몬스터 만나면 자동 공격)Enemy FSMIdle (대기)Chase (플레이어 쫓기)Attack (공격)

Unity 3D 방치형 RPG – 코어 구조 정리

자동 전투 + 성장 시스템을 갖춘 3D 방치형 RPG를 만들기 위한 기본 구조를 정리하였다. 폴더 구조Assets ┣ Scripts ┃ ┣ Core // 매니저 (GameManager, UIManager) ┃ ┣ Character // 플레이어, 몬스터 + FSM ┃ ┣ StateMachine // IState, StateMachine ┃ ┣ UI // UI 관련 ┃ ┣ Data // ScriptableObject (아이템, 몬스터, 스테이지) ┃ ┣ Inventory // 인벤토리 시스템 ┣ Prefabs ┃ ┣ Characters // Player, Monster 프리팹 ┃ ┣ UI // UI 프리팹 ┣ Sc..

Unity 최적화 – Update 가볍게, 캐싱하기

기본 개념게임 개발에서 Update()는 매 프레임 실행되기 때문에 캐싱과 최소화가 핵심이다. 캐싱이란?transform, GetComponent() 같은 값은 매번 접근하면 비용이 큼한 번 가져와서 변수에 저장(캐싱)해두면 성능이 좋아짐private Transform playerTransform;private float moveSpeed;public PlayerMoveState(Player player) { playerTransform = player.transform; // 캐싱 moveSpeed = player.MoveSpeed; // 캐싱} 코루틴으로 Update 줄이기타이머나 반복 동작은 꼭 Update()에 둘 필요가 없다.코루틴(Coroutine)을 쓰면 Update를..

Re-Call Unity 3D 팀 프로젝트 회고

게임 개요Re-Call은 Unity 3D 엔진으로 개발된 시간 루프 메커니즘을 가진 서바이벌 퍼즐 게임입니다.플레이어는 24시간이라는 제한된 시간 안에서 반복되는 루프를 통해 퍼즐을 해결하고 생존해야 합니다. 개발 환경엔진: Unity 2022.3.17f1언어: C#렌더링: Universal Render Pipeline (URP)플랫폼: PC (Windows)Universal Render Pipeline (URP): 렌더링 파이프라인 (14.0.9)TextMeshPro: UI 텍스트 렌더링 (3.0.6)Input System: 입력 시스템 (1.7.0)AI Navigation: NavMesh 기반 AI 내비게이션 (1.1.6) 개발 기간5/26 ~ 6/1 게임 조작법WASD: 이동마우스: 시점 조작E:..

728x90