본문 바로가기
Hello, World!/Unity

유니티 3D 좀비 서바이벌 게임 만들자 (15)

by 27일 낮 2022. 6. 1.
728x90

플레이어의 체력을 구현해보자

 

 

PlayerHealth.cs 생성 PlayerCharacter에 할당 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // UI 관련 코드

// 플레이어 캐릭터의 생명체로서의 동작을 담당
public class PlayerHealth : LivingEntity
{
    public Slider healthSlider; // 체력을 표시할 UI 슬라이더

    public AudioClip deathClip; // 사망 소리
    public AudioClip hitClip; // 피격 소리
    public AudioClip itemPickupClip; // 아이템 습득 소리

    private AudioSource playerAudioPlayer; // 플레이어 소리 재생기
    private Animator playerAnimator; // 플레이어의 애니메이터

    private PlayerMovement playerMovement; // 플레이어 움직임 컴포넌트
    private PlayerShooter playerShooter; // 플레이어 슈터 컴포넌트

    private void Awake() {
        // 사용할 컴포넌트 가져오기
        playerAnimator = GetComponent<Animator>();
        playerAudioPlayer = GetComponent<AudioSource>();
        
        playerMovement = GetComponent<PlayerMovement>();
        playerShooter = GetComponent<PlayerShooter>();
    }

    protected override void OnEnable() {
        // LivingEntity의 OnEnable() 실행 (상태 초기화)
        base.OnEnable();
    }

    // 체력 회복
    public override void RestoreHealth(float newHealth) {
        // LivingEntity의 RestoreHealth() 실행 (체력 증가)
        base.RestoreHealth(newHealth);
    }

    // 대미지 처리
    public override void OnDamage(float damage, Vector3 hitPoint, Vector3 hitDirection) {
        // LivingEntity의 OnDamage() 실행 (대미지 적용)
        base.OnDamage(damage, hitPoint, hitDirection);
    }

    // 사망 처리
    public override void Die()
    {
        // LivingEntity의 Die() 실행 (사망 적용)
        base.Die();
    }

    private void OnTriggerEnter(Collider other) {
        // 아이템과 충돌한 경우 해당 아이템을 사용하는 처리
    }
}

할당해줌

 

 


경로를 자동으로 계산하는 인공지능 좀비를 구현을 위해 유니티 내비게이션 시스템을 써보자

 

 

  • 내비게이션 시스템
    • 한 위치에서 다른 위치로의 경로(최적의 이동 경로)를 계산
    • 실시간으로 장애물을 피하며 이동하는 인공지능
    • 정적 게임 오브젝트(static)를 대상으로 생성됨
    • 게임 플레이 도중에 실시간으로 생성할 수 없음. 미리 구워서(bake) 생성
    • 구성 요소
      • 내비메시(NavMash) : 에이전트가 걸어 다닐 수 있는 표면
      • 내비메시 에이전트(NavMesh Agent) : 내비메시 위에서 경로를 계산하고 이동하는 캐릭터 또는 컴포넌트
        (학습된 모델이 적용될 대상)
      • 내비메시 장애물(NavMesh Obstacle) : 에이전트의 경로를 막는 장애물
      • 오프메시 링크(Off Mesh Link) : 끊어진 내비메시 영역 사이를 잇는 연결 지점(뛰어넘을 수 있는 울타리나 타고 올라갈 수 있는 담벼락을 구현하는 데 사용)

 

 

Window - AI - Navigation

 

 

Agent Radius : 에이전트의 반지름

Agent Height : 에이전트의 키

 

에이전트의 반지름과 키를 늘리면 내비메시 크기 작게 구워지고 게임 도중 인공지능이 다닐 수 있는 영역이 좁아짐

키와 반지름을 줄이면 내비메시 넓어지지만 이동해선 안 되는 너무 좁고 낮은 장소까지 에이전트가 이동할 수도 있음

 

 

 

설정하고 Bake를 눌러주면 됨

구워진 내비메시는 씬 창에 파란색으로 표시된다

 

 

 


좀비 게임 오브젝트를 준비하자

애니메이터, 콜라이더, 오디오 소스, 인공지능, 파티클 자식으로 추가

 

 

애니메이터를 추가할 때 Apply Root Motion을 체크 해제해줌

  • 루트 모션 적용 Apply Root Motion
    • 게임 오브젝트의 위치와 회전을 애니메이션이 제어하도록 허용하는 것
    • 앞으로 걷는 애니메이션이 있다면 애니메이션을 적용하는 동안 게임 오브젝트의 실제 위치가 이전보다 앞쪽으로 변경됨
      루트 모션 적용 사용하지 않으면 제자리 걷는 애니메이션이 적용된다
    • 루트 모션 적용을 사용하면 아티스트의 의도를 반영한 움직임을 만들 수 있지만 스크립트로 움직임을 제어하기가 힘듦

 

 

 

Nav Mesh Agent

댓글