728x90

2025/05 31

Unity FSM – 적을 3초 보이고 1초 숨기기

기존 방식의 문제Update() + 타이머 → 매 프레임 GetComponent 호출 → 성능 낭비로직이 길어져 가독성이 떨어짐 개선 방법1. Renderer 캐싱한 번만 가져와서 계속 사용 → 성능 향상private Renderer _renderer;public void Enter(Enemy enemy) { _renderer = enemy.GetComponent();} 2. 코루틴으로 시간 제어타이머 대신 코루틴으로 깔끔하게 반복 처리private IEnumerator InvisibilityLoop() { while (true) { _renderer.enabled = true; // 3초 보이기 yield return new WaitForSeconds(3f); ..

OnDrawGizmos를 이용해 범위 시각화하기

기본 개념적 AI의 추격 범위(chasingRange)와 공격 범위(attackRange)를 눈으로 확인하기 위해서 함수를 사용하였다. 코드방법 1. 오브젝트 선택했을 때만 보이게private void OnDrawGizmosSelected() { Gizmos.color = Color.yellow; Gizmos.DrawWireSphere(transform.position, chasingRange); Gizmos.color = Color.red; Gizmos.DrawWireSphere(transform.position, attackRange);} 씬(Scene) 뷰에서 해당 오브젝트 선택 시 원 표시적 오브젝트 선택 후 Scene 뷰 + Gizmos 버튼 활성화하면 바로 확인이 가능하..

Unity GetComponent<Renderer>() 간단 정리

이 코드가 하는 일Renderer renderer = GetComponent();현재 오브젝트의 Renderer 컴포넌트(외형 담당)를 가져옴Renderer는 오브젝트를 화면에 보이게 하는 기능을 담당 대표 활용// 오브젝트 숨기기renderer.enabled = false;// 다시 보이게renderer.enabled = true; 정리GetComponent() → 내 오브젝트의 외형 제어 컴포넌트 가져오기renderer.enabled = false → 안 보임renderer.enabled = true → 보임 주로 투명화, 깜빡이기, 머티리얼 변경 같은 연출에 자주 사용됨!

Unity FSM: 왜 bool 대신 Func<bool>을 쓸까?

기본 개념EnemyTransitionConditions.cs 안에서 이런 코드가 나온다. 이 코드를 공부해보았다.public static Func PlayerInChaseRange(EnemyController e) => () => Vector3.Distance(e.transform.position, e.Player.position) 1. EnemyController e란?그냥 적 하나를 가리키는 매개변수이 적의 위치(e.transform.position)와 플레이어 위치(e.Player.position)를 비교하는 용도 2. Func이란?실행하면 true/false를 돌려주는 작은 함수즉, “조건 검사 공식”을 함수로 만들어둔 것Func condition = () => true;if (condi..

추상클래스 abstract vs virtual

abstract본문 없음 → 자식이 반드시 구현해야 함자식 클래스에서 override 없으면 컴파일 에러 발생public abstract class EnemyState { public abstract void Update(); // 자식이 무조건 구현해야 함} virtual기본 구현 있음 → 자식이 원하면 override구현 안 해도 기본 기능 그대로 사용 가능public abstract class EnemyState { public virtual void Enter() { Debug.Log("기본 Enter"); } public abstract void Update(); // 반드시 구현 public virtual void Exit() { Debug.Log("기본 Exit");..

[C#] 추상클래스

추상 클래스란?추상 클래스는 말 그대로 "추상적인 틀"이다.즉, 공통되는 기능은 직접 구현해놓고, 각 클래스마다 달라져야 하는 부분은 "구현하지 않고" 남겨두는 클래스 비유: 자동차 설계도Car라는 추상 클래스가 있다.바퀴가 4개이고, 시동을 거는 기능은 모든 차가 같다.그런데 달리는 방식은 차마다 다르다.(전기차, 휘발유차, 수소차 등…)abstract class Car { public void StartEngine() { Debug.Log("엔진 시동 켬"); } public abstract void Drive(); // 구체적인 운전 방식은 자식이 정함} 핵심 개념 3줄 요약개념설명abstract class직접 인스턴스화할 수 없는 클래스abstract method..

[C#] 제네릭(Generic)

제네릭이란?여러 타입에 대해 재사용 가능한 코드를 작성하는 문법즉, 자료형을 미리 정하지 않고 나중에 정할 수 있는 방법이다. 특히 풀링 시스템 같은 데서 쓰인다.public class Box{ public T item;}Box, Box 등 어떤 타입이든 활용 가능하다.T는 타입 매개변수로, 나중에 실제 타입으로 바뀜 📝 예시Box intBox = new Box();intBox.item = 10;Box strBox = new Box();strBox.item = "hello"; 제약 조건 (where)특정 타입만 사용하도록 조건을 걸 수 있다 // T는 반드시 클래스여야 함public class Storage where T : class// T는 MonoBehaviour이면서 IPoolable 인..

728x90