• 티스토리 홈
  • 프로필사진
    SiJun-Park
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
SiJun-Park
  • 프로필사진
    SiJun-Park
    • 분류 전체보기 (121)
      • Unity (80)
        • RPG Project (39)
        • FPS Project (30)
        • 기타 - 개발 (11)
      • 개발 (35)
        • 임베디드 소프트웨어 (7)
        • 컴파일러 (6)
        • 기계학습 (8)
        • 보안 (8)
        • 그래픽스 (2)
        • 그 외 (4)
      • 코딩문제 (5)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • FPS Project - 7 [ Spawn 및 죽은 몬스터 통과]
        2025년 04월 11일
        • SiJun-Park
        • 작성자
        • 2025.04.11.:29

        7에서는 레벨에 따른 몬스터를 생성을 하는 것을 목표로 하였습니다.

         

        public class LivingObjects : MonoBehaviour, IDamageable
        {
            [Header("유저 부가 정보")]
            [Space(10)]
            [Header("체력")]
            public float HP;
            [Header("피해 화면")]
            [SerializeField] Image HitScreen;
            [Header("몬스터 부가 정보")]
            [Space(10)]
            [Header("Prefab")]
            [SerializeField] HpTextControl MonsterHP;
            [Header("폰트 사이즈")]
            [SerializeField] int size;
            [Header("폰트 위치")]
            [SerializeField] float pos;
            [Header("SkinRenderer")]
            [SerializeField] SkinnedMeshRenderer[] SkinRenderer;
            [Header("색이 지속되는 속도")]
            [SerializeField] float ChangeSpeed = .2f;
            protected bool Dead = false;
        
        
            protected bool HitCheck = false;
            protected  Coroutine CurrentCoroutine;
            
            public event System.Action OnDeath;

         

        이전에 만들어 두었던 LivingObjects에 event로 OnDeath를 연결을 해주었습니다.

         

        몬스터만 특별히 처리하는 것인데 굳이 LivingObjects에 있을 필요가 없다고 생각해서 따로 이벤트로 연결 하였습니다.

            void OnDeath()
            {
                if (--LiveMonster <= 0) Invoke("OnSpawn", 3f);
            }

        그래서 몬스터가 죽을 경우 OnDeath라는 함수를 호출을 하고, 만약에 살아있는 몬스터가 0마리보다 적거나 같다면 onSpawn이라는 함수를 3초 후에 시작을 하게 하였습니다

         

        이는 대기시간을 주기 위해서입니다.

         

            void OnSpawn()
            {
                CurrentLevel++;
                MonsterCount = 3 + CurrentLevel;
                LiveMonster = MonsterCount;
                CurrentSpawnTime = 0;
        
                float Calculate = (CurrentLevel / 10f);
                NextSpawnTime = 2 - Calculate;
                HP = 1 + Calculate;
                Speed = 0.07f + (CurrentLevel / 100f);
                if (NextSpawnTime < 0) NextSpawnTime = 0.1f;
            }

         

        OnSpawn함수에서는 레벨을 증가시켜주고, 레벨에 따른 몬스터의 수, 체력, 다음 몬스터가 생성이 될 텀, 속도 정보를 주게 하였습니다.

         

            void Update()
            {
                if(MonsterCount > 0 && Time.time > CurrentSpawnTime)
                {
                    MonsterCount--;
                    CurrentSpawnTime = Time.time + NextSpawnTime;
                    EnemyManager spawnenemy = Instantiate(Enemy, Vector3.zero, Quaternion.identity) as EnemyManager;
                    spawnenemy.OnDeath += OnDeath; // event 연결
                    spawnenemy.HP = HP;
                    spawnenemy.NavMeshAgent.speed = Speed;
                }
            }

        업데이트에선 소환을 하여야 할 MonsterCount가 0보다 많고 생성을 할 주기가 맞다면 현재 소환을 해야할 MonsterCount를 감소시켜 주고 다음 생성 할 주기를 설정 해줍니다.

         

        그 뒤에는 OnDeath라는 Event를 연동을 해주어 몬스터가 죽었을 시 OnDeath라는 함수를 불러올 수 있게 하였습니다.

         

        마지막으로는 레벨에따른 HP와 Speed를 설정을 해줌으로써 완성을 하였습니다.

         

         

                    case "Enemy":
                        LivingObjects damageable = other.GetComponent<LivingObjects>();
                        if (damageable != null) {
                            if (damageable.GetDead() == true) break;
                            damageable.Hit(1, other.gameObject, Owner); 
                        }
                        Destroy(gameObject);
                    break;

         

        그리고 이전 총알에서는 몬스터가 데미지를 입을 수 있다면 데미지를 주는 형식으로 하였는데

        이렇게 한다면 죽은 몬스터에게 지속적으로 총알이 들어가기 때문에 몬스터가 죽었으면 다음 오브젝트로 넘어가게 하여서 수정을 하였습니다.

         

         

        결과

         

        'Unity > FPS Project' 카테고리의 다른 글

        FPS Project - 9 [ Sound, 발소리 구현]  (0) 2025.04.14
        FPS Project - 8 [ 점프 ]  (0) 2025.04.13
        FPS Project - 6 [ 장전 ]  (0) 2025.04.08
        FPS Project - 5 [ 몬스터 이동 및 공격 ]  (0) 2025.04.06
        FPS Project - 4 [ 데미지2 ]  (0) 2025.04.05
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바