닷지 01) 맵, 플레이어, 총알 제작

2023. 3. 4. 12:56·Unity 3D/닷지

이미지 출처 : https://oldgameheaven.com/416

예전에 이런 게임을 해보신 분들이 있을 겁니다.

한없이 날아오는 총알을 피하고 생존 시간으로 승부하는 간단한 미니 게임

이름 그대로 닷지(Dodge, 회피)

 

예전에 샀던 '레트로의 게임 프로그래밍 에센스' 교재를 복습하면서 만들어보기로 하겠습니다.

책 내용을 그대로 쓰지 않고 단계별로 필요한 절차만 간소화하여 정리하겠습니다.

 

다만, 교재만 따라 하는 것은 만들면서 재미가 없으니 저만의 커스텀 파트도 있을 예정입니다.

 

1. 유니티 3D 프로젝트를 생성

 

2. 맵

     1) 바닥(Plane), 벽(Cube) 게임 오브젝트 생성

     2) 트랜스폼(위치, 회전,스케일) 조정

     3) 새 머터리얼을 생성하여 바닥에 색상 부여

     4) 메인 카메라가 맵 전체를 볼 수 있게 위치, 회전 값 조정 + 배경을 단색으로 변경

 

3. 플레이어

     1) 플레이어 게임 오브젝트 생성 (Sphere)

     2) 트랜스폼 : 바닥 위로 올라오도록 위치 조정

     3) 새 머터리얼을 생성하여 플레이어에 색상 부여

     4) 플레이어에 Player 태그 부여

     5) Rigidbody 컴포넌트 추가

         Rigidbody > Use Gravity 체크 해제 (해제하지 않으면 중력의 영향을 받아 Y축 (-) 방향으로 계속 힘을 받아 이동)

     6) C# 스크립트를 생성

         플레이어 오브젝트의 컴포넌트로 추가

         구현 내용 : Input Manager를 이용한 입력 처리, 키 입력에 대해 즉각적으로 반응하는 이동

         Edit - Project settings - Input Manager - Axes 각 입력 이름 및 맵핑된 키를 확인          

방향키 상하좌우, WASD가 기본값
리지드바디 컴포넌트에 접근하기 위한 변수 생성, 이동 속도 설정
플레이어 이동

 

◈ 총알을 생성하기에 앞서, 유니티에서 충돌을 구현하는 방법에 대해 컴포넌트 별로 쪼개서 알아보겠습니다.

  • 콜라이더(Collider) : 충돌 판정을 하려는 두 오브젝트가 모두 포함하고 있어야 한다.
  • 리지드바디(RigidBody) : 두 오브젝트 중 적어도 하나는 포함하고 있어야 한다,
                                            움직이는 오브젝트가 가지고 있어야 한다,
                                            Collision 관련 함수를 쓸 때, is Kinematic 체크를 해제하여아 한다.
                                            (체크되어 있다면 외부에서 오는 물리 효과를 무시하므로 Collision은 판정하지 못함)

따라서, 플레이어와 총알은 모두 콜라이더를 가지고 있어야 하며, 적어도 총알은 리지드바디를 가지고 있어야 합니다.

 

그리고 이번 프로젝트에서 플레이어는 맵 경계인 벽을 통과하지 못하게 물리적 효과를 적용할 예정이므로 플레이어에도 리지드바디를 추가했습니다.

 

 

4. 총알

     1) 총알 오브젝트 생성 (Sphere)

     2) 트랜스폼

         (1) 리셋으로 Position = {0, 0, 0}, Rotation = {0, 0, 0}, Scale = {1, 1, 1}로 초기화

         (2) 스케일을 줄여 플레이어보다 총알이 작게 되도록 조정

     3) 새 머터리얼을 생성하여 총알에 색상 부여

     4) Rigidbody 컴포넌트 추가

         Rigidbody > Use Gravity 체크 해제

                          > Constraints > Freeze Position > Y 체크

                          > Constraints > Freeze Rotation > X, Z 체크

     5) C# 스크립트를 생성

         총알 오브젝트의 컴포넌트로 추가

         (1) 초기 이동

              private void Start(){} 에서는 해당 스크립트를 가진 오브젝트 생성 이후 한번만 실행하는 내용으로

              여기에 초기 이동 속도, 방향에 대한 코드 작성

         (2) 충돌 처리

              ㄴ 플레이어와 충돌한 경우 : 게임 오버 (임시로 오브젝트 비활성화로만 처리합니다)

              ㄴ그 외(벽, 다른 총알)과 충돌한 경우 : 튕겨서 방향을 꺾고 계속 이동

                  물체가 충돌할 때 작용 반작용에 의해 충돌의 반대 방향으로 힘을 받습니다.

                  벽에는 리지드바디가 포함되어 있지 않아 물리적 처리를 하지 않습니다.

                  하지만, 충돌할 때 총알에만 충돌의 반대 방향으로 충분한 힘만 준다면 벽에 튕기는 효과를 줄 수 있습니다.

여기까지 하고 실행 결과를 보겠습니다.

벽과 충돌하는 총알은 튕기고, 플레이어와 닿으면 사망 처리하는 것을 확인했습니다.

 

제일 위의 닷지 게임 스크린 샷을 보아서 아시겠지만 총알은 여럿이 출현합니다.

지금까지 만든 총알을 프리팹(Prefab)으로 등록하여 그대로 복제하여 쓸 수 있도록 해보겠습니다.

하이어라키 창에 만들어진 총알 오브젝트를 프로젝트 창에 프리팹을 모아놓을 폴더로 드래그 앤 드롭하면 오브젝트 이름 및 아이콘이 하늘색으로 변하면서 프리팹이 되었다는 것을 표시해줍니다.

프리팹 생성이 완료되면 이를 복제하여 사용할 준비가 된 것이므로 하이어라키 창의 총알 오브젝트를 삭제해줍니다.

'Unity 3D > 닷지' 카테고리의 다른 글

닷지 03) GameManager, 기존 오브젝트에 기능 추가, UI  (0) 2023.03.06
닷지 02) 총알 생성 포인트, 오브젝트 풀링  (0) 2023.03.06
'Unity 3D/닷지' 카테고리의 다른 글
  • 닷지 03) GameManager, 기존 오브젝트에 기능 추가, UI
  • 닷지 02) 총알 생성 포인트, 오브젝트 풀링
ybbro
ybbro
대부분의 포스팅은 pc에서 작성되었습니다. 모바일에서 볼 때 설명이 잘리면 데스크탑 모드를 사용해보길 바랍니다.
  • ybbro
    어떻게든 굴리는 게임 공방
    ybbro
  • 전체
    오늘
    어제
    • 전체 N
      • 스파르타코딩클럽_Unity개발과정 N
      • Unity 2D
        • 카드게임
        • 플랫포머 게임
        • 뱀서라이크
      • Unity 3D
        • 닷지
        • 유니티 짱
        • 디펜스 게임
      • Unity 에러 노트
      • 기능 구현 방법 정리
      • 셰이더 그래프
        • 2D
        • 3D
      • 프로그래머스
      • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    대시
    unity
    UI
    hello
    64비트
    무료스킨
    잔상
    앱이 휴대전화와 호환되지 않아 설치되지 않았습니다
    삭제
    sprite mask
    룰렛
    텍스트매시프로
    세이브
    스파인
    직렬화
    마스크
    다크모드
    갤럭시 S24
    유니티
    유니티 애니메이터 파라미터 초기화
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ybbro
닷지 01) 맵, 플레이어, 총알 제작
상단으로

티스토리툴바