GURU_unity_2주차 슈팅 게임 제작3-2

2023. 7. 5. 03:04SWU_프로젝트/GURU - unity

오늘은 좀 양이 많아서 2개로 분류했다.

 

이번에는 아래와 같은 것들을 배워볼 것이다.

4. 폭발 효과
5. 배경 추가
6. 사운드 추가

 

4. 폭발 효과

 

[Window – Asset Store]를 통해서 아래 사진처럼 접속해준다.

아래 사진처럼 Cartoon FX Free를 입력해준다. 

내 에셋에 추가한다.!

마찬가지로 승인, Unity Editor에서 열기를 해준다. ( 3-1장에 자세한 설명이 있으니 참고하세요! )

다운로드를 해주고 import해준다.!

 

 

객체간 폭발 여부 정의

 

  • 플레이어와 자신이 발사한 총알의 충돌은 금지 
  • 에너미와 플레이어, 에너미와 총알의 충돌은 가능하도록 한다.

 

폭발 효과 구현의 목표와 구현순서

 

목표 : 적이 다른 물체와 충돌 했을 때 폭발 효과를 발생 시키고 싶다.

순서 : 1. 적이 다른 물체와 충돌 했으니까.

          2. 폭발 효과 공장에서 폭발 효과를 하나 만들어야 한다.

          3. 폭발 효과를 발생(위치) 시키고 싶다.

 

폭발 공장 속성 선언

public class Enemy : MonoBehaviour
{
public float speed = 5;
GameObject player;
Vector3 dir;
//폭발 공장 주소(외부에서 값을 넣어준다.)
public GameObject explosionFactory; } 
  • [Project – Assets – Scripts] 폴더에서 Enemy.cs 스크립트를 더블클릭하여 비주얼스튜디오 에서 열어준다.
  • 폭발공장주소를 위 처럼 스크립트에 추가한다.

  • Project – Assets – Prefabs] 폴더에서 Enemy 프리팹을 더블클릭하여 프리팹 편집 창으로 이동한다.
  • [JMO Assets – Cartoon FX – CFX Prefabs – Explosions] 폴더에서 CFX_Explosion_B_Smoke+Text 를 사용한다. 
  • CFX_Explosion_B_Smoke+Text 프리팹을 드래그 하여 그림처럼 유니티 에디터에 노출된 Explosion Factory 속성에 드롭하여 할당한다.

 

Enemy.cs에 아래와 같은 코드를 추가해준다.

//1. 적이 다른 물체와 충돌 했으니까.
private void OnCollisionEnter(Collision collision)
{
//2.폭발 효과 공장에서 폭발 효과를 하나 만들어야 한다.
GameObject explosion = Instantiate(explosionFactory);
//3.폭발 효과를 발생(위치) 시키고 싶다
explosion.transform.position = transform.position;
Destroy(collision.gameObject);
Destroy(gameObject);
}
  • 에너미가 다른 물체와 충돌 했을 때는 OnCollisionEnter 함수가 호출되는 순간 뜻한다.
  • Instantiate 함수에 폭발 효과 공장(explosionFactory)을 넘기면 공장(파일)을 가동시켜 폭발 효과를 하나 만들어 준다.

 

 

5. 배경 추가

 

스크롤 방식 사용

위에서 아래로 배경 한장으로 스크롤 되는 드래곤플라이트 게임의 방식을 구현한다.

우선, 애셋스토어 창을 열어 “Space Start Field Backgrounds” 를 검색하여 다운로드한다.

나는 첫번째를 사용할 것이다.

선택하고 내 에셋에 추가한다.

+ 승인, Unity Editor에서 열기를 해준다. 

애셋스토어에서 다운로드가 끝나면 Import 버튼을 눌러준다.

Import Unity Package 창이 뜨면 우리 프로젝트에 필요한 애셋들만 선별하여 가져오도록 선택하여 Import 해야 하는데 나는 다해버렸다.

원래는 체크된 항목만 해야한다.

 

이제 스크립트를 작성할 것이다.

목표 : 스크롤 되는 배경을 제작하고 싶다.
순서 : 1. 배경 매터리얼 제작
          2. 배경 게임오브젝트 제작
          3. 배경 스크롤 스크립트 제작

배경 매터리얼 제작

Project 창에서 Folder 를 하나 만들어 주고, 이름을 Materials 로 변경해준다.

Project 창에서 [+] 버튼을 눌러 Materials 폴더에 Material 을 하나 만들어 준다.

이름은 Mat_Background 로 지정한다.

 

  • Mat_Background 매터리얼을 선택하여 인스펙터 창을 해당 매터리얼의 속성을 수정할 수 있는 상태로 변경한다.
  • Albedo 속성에 그럼에서의 경로에 있는 SingleNeb_07 을 드래그 앤 드롭하여 할당한다.

 

배경 게임오브젝트 제작

  • 하이어라키에서 쿼드(Quad) 를 하나 만들고 이름을 Background 지정한다. 
  • Transform 정보를 아래 그림처럼 지정한다.

Hierarchy창에 +버튼을 누르고 3d 오브젝트에 Quad를 선택하여 이름을 Background로 변경하여준다.

Scale을 위와 같이 수정하고 , Meterials에 아까 우리가 만들어놓은 Meterials를 드래그해 넣어준다.

이렇게 배경이 생겨났다.

 

배경 게임오브젝트 제작 - 문제점

 

  • 화면에 있던 배경이 없어져 버리는 문제가 발생
  • 배경이 적과 부딪혀 발생하는 문제.

해결하기 위해서 Background z좌표값을 1.5로 수정해준다.

이제 배경이 완성되었으니 스크롤을 만들어볼 것이다.

 

배경 스크롤 스크립트 제작

scripts 폴더에 script를 추가하고 이름은 Background로 변경해준다.

Hierarchy창에 Background에 드래그해서 추가해준다.

 

이제 스크립트를 작성해볼 것이다.

목표 : 배경 스크롤이 되도록 하고 싶다.
필요속성 : 매터리얼, 스크롤속도
순서 : 1. 살아 있는 동안 계속 하고 싶다.
          2. 방향이 필요하다.
          3. 스크롤을 하고 싶다.

Background.cs 에서 필요한 속성은 매터리얼과 스크롤속도 두 가지로 해당 속성을 선언한다.

public class Background : MonoBehaviour
{
//배경매터리얼
public Material bgMaterial;
//스크롤속도
public float scrollSpeed = 0.2f;
}

 

아까만든 Meterials에 Mat_background를 Bg Material에 드래그한다.(지금 발견한 것인데 폴더이름에 오타가 있다. 수정해야지..)

 

update메서드에 넣을 코드를 작성해보자.

public class Background : MonoBehaviour
{
. . . (생략) . . . //
1. 살아 있는 동안 계속 하고 싶다.
void Update()
{
//2. 방향이 필요하다.
Vector2 direction = Vector2.up;
//3. 스크롤을 하고 싶다. P = P0 + vt
bgMaterial.mainTextureOffset += direction * scrollSpeed * Time.deltaTime; }
}
  • 살아 있는 동안 계속 하고 싶다” 는 Update 라이프사이클 함수에서 처리하는 것을 의미한다. 
  • 방향이 필요하다” 는 Material 의 Offset 속성 값이 Vector2 형식이기 때문에 Vector2.up 으로 만든다.
  • 스크롤을 하고 싶다” 는 mainTextureOffset 속성에 이동 공식 P = P0 + vt 를 이용하여 구현한다. 

이제 실행해보자.

이렇게 실행되는데 배경이 너무 마음에 든다.

 

6. 사운드 추가

Add Component를 통해  Audio Source 를 추가한다.

가지고 있던 음원파일을 Assets 파일에 넣어준다. CP03_Sound이다.

AudioClip에 Audio_Bullet을 넣어준다.

반드시 이게 켜져있어야 소리가 난다.

 

이제 폭파소리도 추가해볼 것이다. 그러기 위해서, CFX_Explosion_B_Smoke+Text를 찾아서 이곳에 Add Component를 통해  Audio Source 를 추가한다.

 마찬가지로 AudioClip에 Audio_Explosion을 넣어준다.

 

이제 배경음악을 넣어줄 것이다.

Background에 Add Component를 통해  Audio Source 를 추가한다.

그리고 AudioClip에 Audio_BGM을 넣어줄 것이다.

Loop옵션을 체크해서 반복적으로 소리를 들을 수 있게 해준다.

다 만들고 게임하는 것을 영상에 담아봤다.

 

오류가 자꾸나서 속상하지만 배우는 과정은 재미있는 것 같다.