Unity Chapter 11-8. 좀비 TPS 게임 만들기 : Gun 게임 오브젝트 준비
카테고리: Unity Lesson 1
태그: Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!
Chapter 11. 좀비 TPS 게임 만들기
Gun 오브젝트
- 📂Assets/Prefabs 에 있는 🟦Gun 프리팹을
Player Character
의Gun Pivot
의 자식 오브젝트로 넣어주자!- 총은 플레이어의 것이니까.
- 총 과 총을 쏘는 Shooter 를 분리해줄 것이다.
- 간결함과 확장성을 위하여
- 예를 들어 총을 교체하는 시스템을 구현할 때 Shooter는 그대로이되 총만 바꿔주면 되어서 간결함
-
도구
와도구를 실제로 사용하는 매커니즘
은 분리해주는 것이 좋다. 📜Gun
,📜PlayerShooter
- 간결함과 확장성을 위하여
구성
Gun
- 자식 1 👉
Left Hand
- 모델의 왼손이 배치될 곳
- 모델의 왼손이
Gun
오브젝트의Left Hand
에 자동으로 붙게 할 것.- IK를 통해 관절을 꺾어 모델의 왼손이 배치될 총의 지점.
- 자식 2 👉
Fire Transform
- 총알이 나가는 위치와 방향을 결정
- 총의 발사구에 위치
- 자식 3 👉
Model
- 총의 3 D 모델. 생김새.
- 자식 1 👉
Gun
의 Pivot 좌표(= 기준점)는 총의 오른 손 잡이에 배치되어 있다.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()에서 카메라가 캐릭터를 따라가도록 하는 식으로 구현한다.
- 유니티 함수로, 매 프레임마다 실행되지만 Update()함수 보다 늦게 실행된다.
-
targetToFollow 슬롯에
Player Character
의 뼈대가 되는 모델 중 하나인 오른손 모델LowManRightHand
를 드래그 앤 드롭 해준다.- 이렇게
Gun
의 Pivot이Player Character
의 오른손 모델LowManRightHand
위치와 회전에 일치하게 되는데 너무 정확하게 일치해서 조금 어색하다는 것을 알 수 있다..😱
- 이렇게
Offset 을 두어 오른손에 자연스럽게 배치하기
Gun
을Player 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
를 드래그 앤 드롭 해준다. - 이제 적절히 오른 손에 견착된 것을 알 수 있다.
오른손은 위와 같이 코드를 통하여 총의 피봇이 늘 오른손의 위치와 회전(좀 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
- 탄피 배출 이펙트
- 🟦MuzzleFlash
- 📁Assets/Prefabs
- 둘다
Gun
의 자식으로 넣어준다. - 🟦MuzzleFlash 의 Transform을 아래와 같이 설정해주어 총구에서 파티클 효과가 재생되도록 한다.
- 🟦ShellEjectEffect 의 Transform을 아래와 같이 설정해주어 총구에서 파티클 효과가 재생되도록 한다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기