Unity Chapter 11-8. 좀비 TPS 게임 만들기 : Gun 게임 오브젝트 준비

Date:     Updated:

카테고리:

태그:

인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!


Chapter 11. 좀비 TPS 게임 만들기

Gun 오브젝트

image

  • 📂Assets/Prefabs 에 있는 🟦Gun 프리팹을 Player CharacterGun Pivot의 자식 오브젝트로 넣어주자!
    • 총은 플레이어의 것이니까.
  • 총을 쏘는 Shooter 를 분리해줄 것이다.
    • 간결함과 확장성을 위하여
      • 예를 들어 총을 교체하는 시스템을 구현할 때 Shooter는 그대로이되 총만 바꿔주면 되어서 간결함
    • 도구도구를 실제로 사용하는 매커니즘은 분리해주는 것이 좋다.

    • 📜Gun, 📜PlayerShooter

구성

  • Gun
    • 자식 1 👉 Left Hand
      • 모델의 왼손이 배치될 곳
      • 모델의 왼손이 Gun 오브젝트의 Left Hand에 자동으로 붙게 할 것.
        • IK를 통해 관절을 꺾어 모델의 왼손이 배치될 총의 지점.
    • 자식 2 👉 Fire Transform
      • 총알이 나가는 위치와 방향을 결정
      • 총의 발사구에 위치
    • 자식 3 👉 Model
      • 총의 3 D 모델. 생김새.
  • GunPivot 좌표(= 기준점)는 총의 오른 손 잡이에 배치되어 있다.
    • Gun이 자동으로 Player Character의 오른손에 배치되도록 할 것
      • 📜LateUpdatedFollow.cs 가 할 일.


📜LateUpdatedFollow.cs

Gun 오브젝트에 붙여준다.

  • Gun의 기준점(Pivot)인 Gun의 오른손 총 잡이 부분이 자동으로 항상 Player Character오른손의 위치에 배치되도록 하는 역할을 한다.
  • 매 프레임마다 특정 Transform 위치, 회전(👉 Player Character의 오른손)으로 자기 자신의 Transform 위치, 회전(👉 Gun)에 덮어 씌운다.
using UnityEngine;

public class LateUpdateFollow : MonoBehaviour
{
    public Transform targetToFollow; // 따라갈 대상 Transform

    private void LateUpdate()
    {
        // 매 프레임마다 덮어 씌운다.
        transform.position = targetToFollow.position;
        transform.rotation = targetToFollow.rotation;
    }
}
  • LateUpdate
    • 유니티 함수로, 매 프레임마다 실행되지만 Update()함수 보다 늦게 실행된다.
      • Update() 함수 실행이 다 끝난 후에, Update()함수의 종료 시점에 맞춰서 LateUpdate() 가 실행된다.
    • 예를 들어 캐릭터의 이동 방향 계산은 Update() 에서 끝내준 후,Update()에서 계산 끝낸 캐릭터의 이동 방향에 따라 LateUpdate()에서 카메라가 캐릭터를 따라가도록 하는 식으로 구현한다.
  • targetToFollow 슬롯에 Player Character의 뼈대가 되는 모델 중 하나인 오른손 모델 LowManRightHand를 드래그 앤 드롭 해준다.

    • image
    • image
    • 이렇게 Gun의 Pivot이 Player Character의 오른손 모델 LowManRightHand 위치와 회전에 일치하게 되는데 너무 정확하게 일치해서 조금 어색하다는 것을 알 수 있다..😱
      • image


Offset 을 두어 오른손에 자연스럽게 배치하기

  • GunPlayer Character의 오른손 위치에 그대로 일치하게 배치하면 좀 부자연스러워 보일 수 있기 때문에 Player Character의 오른손 위치에서 조금 차이를 둔 위치와 회전에 Gun을 배치하도록 하자.

오른 손 모델 LowManRightHand의 자식 오브젝트로 빈 오브젝트인 Right Hand Attach라는 이름의 오브젝트를 생성해준다.

  • 오른 손에 쥐어 줄 물체를 위한 오브젝트.
    • 오른 손에 쥐어 줄 때 약간의 Offset을 두어 위치와 회전 값을 설정해주기 위하여 생성.
  • LowManRightHand의 자식이므로 Right Hand Attach에서 조작하는 Transform 값은 부모인 `LowManRightHand`로부터 떨어진 위치와 회전을 나타낸다.
    • Right Hand Attach의 위치를 (0.016, 0.1, 0.11) 로 설정해준다.
      • 즉, 부모인 LowManRightHand로부터 (0.016, 0.1, 0.11)만큼 떨어진 곳에 위치.
    • Right Hand Attach의 회전을 (-50, -18.7, 189) 로 설정해준다.
      • 즉, 부모인 LowManRightHand의 회전값보다 (-50, -18.7, 189)만큼 더 회전.
  • targetToFollow 슬롯에 이 Right Hand Attach를 드래그 앤 드롭 해준다.

    • image
  • 이제 적절히 오른 손에 견착된 것을 알 수 있다.
    • image

오른손은 위와 같이 코드를 통하여 총의 피봇이 늘 오른손의 위치와 회전(좀 Offset이 된)으로 덮어씌우게끔 했고, 왼손은 추후 IK 애니메이션을 통하여 늘 왼손이 총을 자연스럽게 딱 잡고있게끔 구현할 것이다.


Line Renderer 컴포넌트

총을 쏠 때, 총알의 궤적을 그리기 위한 컴포넌트. 검색하여 Gun 오브젝트에 붙여준다.

  • 주어진 점들을 이은 선을 그리는 역할을 한다.
  • Cast Shadows
    • Off 시켜준다. 총알 궤도의 그림자를 발생시킬 필요 없음.
  • Recive Shadows
    • 체크 해제 해준다. 총알 궤도가 그림자를 받을 필요는 없음.
  • 총알 궤적의 색깔을 입혀 줄 Material Element를 Bullet Color Meterial로 설정해준다.
    • 노란색임!
  • Position의 Size를 0으로 해준다.
    • size는 점의 개수를 뜻한다. size 수를 지정하면 그 만큼 좌표 슬롯들이 열리는데 점의 좌표를 각각 지정해줄 수 있다.
    • 코드 상에서 지정할거라서.. 일단 0 으로 해둔다.
      • 총알이 발사되는 점 - 총알이 닿은 점을 잇는 선분을 그리도록 코드로 구현할 것.
  • 선의 두께는 0.02로 줄여주기

총을 쏘는 그 순간에만 아주 일시적으로 총알 궤적을 그릴 것이다. 따라서 평소에는 Line Renderer 컴포넌트를 꺼두고 총을 쏠 때만 활성화 하고 다시 바로 꺼야 한다.

  • Line Renderer 비활성화 하기


Audio Source 컴포넌트

발사 소리를 재생

  • Play On Awake 해제


파티클 효과

  • 총을 발사할 때 사용할 2 가지 파티클
    • 📁Assets/Prefabs
      • 🟦MuzzleFlash
        • 총구 화염 이펙트
      • 🟦ShellEjectEffect
        • 탄피 배출 이펙트
  • 둘다 Gun의 자식으로 넣어준다.
  • 🟦MuzzleFlash 의 Transform을 아래와 같이 설정해주어 총구에서 파티클 효과가 재생되도록 한다.
    • image
  • 🟦ShellEjectEffect 의 Transform을 아래와 같이 설정해주어 총구에서 파티클 효과가 재생되도록 한다.
    • image


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기


Unity Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기