ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 16장 좀비 서바이버 : 생명과 좀비 AI
    Unity/레트로의 유니티 게임 프로그래밍 에센스 2021. 2. 17. 23:46

    16.1 다형성

        16.1.1 상속 관계에서 다형성

        16.1.2 다형성을 사용한 패턴

        16.1.3 오버라이드

            - virtual 키워드로 지정된 메서드는 가상 메서드가 됨. 가상 메서드는 자식 클래스가 오버라이드할 수 있도록 허용된 메서드. 기존의 부모 타입으로 변환하고 메서드를 실행해도 자식 타입에서 재정의한 메서드가 실행됨.

            - base : 부모 클래스를 지칭.

     

    16.2 LivingEntity

        16.2.1 LivingEntity 전체 스크립트

        16.2.2 LivingEntity의 필드

            - protected 접근 한정자 : 클래스 외부에서는 접근 불가능하지만 자식 클래스에서는 접근 가능. 즉, 해당 클래스를 상속하면 변경가능.

            - private는 상속을 해도 접근 불가.

        16.2.3 Action

            - Action 타입은 입력과 출력이 없는 메서드를 가리킬 수 있는 델리게이트. 메서드를 값으로 할당받을 수 있는 타입.

            - Action onClean; onClean += CleaningRoomA; onClean();

        16.2.4 이벤트 

            - event 키워드로 선언하면, 클래스 외부에서는 해당 델리게이트를 실행하지 못함. 다만 이벤트리스너를 구독시킬 수는 있음.

        16.2.5 OnEnable()

        16.2.6 OnDamage()

        16.2.7 RestoreHealth()

        16.2.8 Die()

     

    16.3 플레이어 체력 UI

        16.3.1 UI 슬라이더 준비

            - UI의 렌더러 모드를 전역 공간으로 변경하면, 캔버스 게임 오브젝트는 일반적인 게임 오브젝트처럼 게임 월드 상의 위치, 회전, 크기를 가짐.

            - Reference Pixels per Unit : UI 스프라이트의 픽셀 크기와 게임 월드의 유닛 크기가 대응되는 비율. UI의 스프라이트 화질에 영향을 줌.

            - Interactable : 사용자가 클릭이나 드래그 등을 이용해 UI 게임 오브젝트와 상호 작용할 수 있음.

            - Transition : UI와 상호작용 시 일어나는 시각 피드백을 설정. 마우스를 가져다 대거나 클릭하면 색이나 투명도가 변하는 등..

            - Min Value, Max Value, Value 에 맞춰 퍼센테이지로 슬라이더에 색을 채움.

        16.3.2 UI 슬라이더의 그래픽 변형

            - Fill 게임 오브젝트의 크기를 Fill Area 게임 오브젝트와 비교하여(값으로) 상대적으로 잡아 늘리거나 슬라이더가 줄어들거나 채워지는 것으로 구현됨.

            - Fill - Image Type - Simple : 단순하게 가로나 세로로 잡아 늘려서 슬라이더를 채움. 동그라미인 경우, 값이 작을 때는 원이 찌그러져있다가(타원형) 값이 max가 되면 완전한 원으로 됨. Simple 대신 Fill로 하면 채우기로 됨.

     

    16.4 PlayerHealth 스크립트

        16.4.41 PlayerHealth 스크립트 열기

        16.4.2 PlayerHealth의 필드

        16.4.3 Awake()

        16.4.5 RestoreHealth()

        16.4.6 OnDamage()

        16.4.7 Die()

        16.4.8 OnTriggerEnter()

        16.4.9 완성된 PlayerHealth 스크립트

        16.4.10 PlayerHealth 컴포넌트 설정

     

    16.5 내비게이션 시스템과 좀비 준비

        16.5.1 내비게이션 시스템

            - 내비메시(NavMesh) : 에이전트가 걸어 다닐 수 있는 표면

            - 내비메시 에이전트(NavMesh Agent) : 내비메시 위에서 경로를 계산하고 이동하는 캐릭터 또는 컴포넌트

            - 내비메시 장애물(NavMesh obstacle) : 에이전트의 경로를 막는 장애물

            - 오프메시 링크(Off Mesh Link) : 끊어진 내비메시 영역 사이를 잇는 연결 지점(뛰어넘을 수 있는 울타리나 타고 올라갈 수 있는 담벼락을 구현하는 데 사용)

        16.5.2 내비메시 필드

        16.5.3 좀비 게임 오브젝트 준비

        16.5.4 좀비 컴포넌트 설정

     

    16.6 Enemy 스크립트

        16.6.1 Enemy의 필드

            - 레이어 마스크(LayerMask)는 특정 레이어를 가진 게임 오브젝트에 물리 또는 그래픽 처리 등을 적용시킬 때 사용.

        16.6.2 Awake()

            - GetComponentInChildren<>(); : 자식 게임 오브젝트에서 컴포넌트 가져오기

        16.6.3 Setup()

        16.6.4 Start()와 Update()

        16.6.5 UpdatePath()

            - Physics.OverlapSphere() : 중심 위치와 반지름을 입력받아 가상의 구를 그리고, 구에 겹치는 모든 콜라이더를 반환. 세번째 값으로 필터링.

        16.6.6 OnDamage()

        16.6.7 Die()

        16.6.8 OnTriggerStay()

        16.6.9 완성된 Enemy 스크립트

        16.6.10 Enemy 컴포넌트 설정

            - Inspetor 창에서 Layer 'Player'로 설정 후, Enemy 스크립트의 'whatIsTarget'에 "Player" 설정하면, Zombie는 Player Character만 target으로 인지한다.

     

    16.7 마치며

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.