코드네임 :
#5 폴리싱 & 이펙트 & 배경 & 사운드 본문
폴리싱
Window - Asset Store
비행기 어쩌고 다운로드 후 임포트..계속
✔︎ 플레이어 폴리싱
글고 일케 설정
✔︎ 에너미 폴리싱
Enemy 옵젝에서 Cube 랑 Mash Renderer 를 Remove 해줌
총알 폴리싱
✔︎ Bullet
- Bullet의 Cube와 MeshRenderer 삭제
- Transform에서 reset 누르면 원점(화면 가운데)으로 이동
- Box Collider 설정 ( Box Collider : 충돌되는 부분) , 총알크기와 비슷하도록 맞춰주는 작업
✔︎ Rocket 08_yellow
- Transform에서 reset 누르면 원점(화면 가운데)으로 이동
-Scale 값 전부 0.15로 설정
효과
에셋 스토어에서 Cartoon FX Free
enemy.cs 에 ExplosionFactory 프리팹 만들어줌
그 프리팹에다가 아래 사진에 있는 이펙트 넣어주기
Enemy.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 5;
Vector3 dir; // 전역변수 dir
// Start() 함수에 있던 걸 Update()함수에 적용하기 위해 전역변수로!
public GameObject explosionFactory; // 폭발을 위한 PreFab
void Start() // 30%의 확률로 !
{
int randValue = Random.Range(0,10); // ()에 들어가 있는 숫자가 실수인 경우 마지막 숫자까지 포함하지만
// 정수인 경우 포함 X
// 즉 위의 경우 0~9 사이의 숫자만 나옴
// int randValue = UnityEngine.Random.Range(0,10);
if (randValue < 3) // 30%의 확률로
{
GameObject target = GameObject.Find("Player");
// Find : Hierarchy창의 모든 이름 중에서 해당하는거("Player") 찾기
// GameObject.Find("Player") : Player 오브젝트를 반환
// GameObject target = GameObject.Find("Player"); : 반환된 Player 오브젝트를 target에다가 지역변수로 넣어주기
// 즉 target이 Player가 됨
dir = target.transform.position - transform.position;
// 적이 현재 주인공이 있는 방향으로 고개(?)를 향하게 됨 !!!
// target.transform.position : Player의 포지션 (주인공의 위치)
// transform.position : 적의 위치
// - : " 현재 위치레서 목표 위치쪽 방향으로 틀어라 "라고 하고 싶을 때 '벡터'의 뺄셈 이용
// 벡터A - 벡터B = 목표 위치A - 현재 위치B
// (근데 벡터이므로 방향만.. 걍 고개 돌리는거 생각하삼)
dir.Normalize();
// dir.Normalize : 정규화 (단위 벡터)
// Player와 적의 거리가 멀 경우 그 거리를 1로 만들어버림 (방향은 동일)
// 이걸 해줌으로써 나중에 speed 곱할 때 동일한 방향, 동일한 속도로 움직일 수 있게 해줌
}
else // 30% 확률 안에 못 들었다면
{
dir = Vector3.down; // 적을 자기가 떨어지는 위치 그대로에서 떨어지게 함 (;; 말이 이상한디
}
}
void Update()
{
transform.position += dir * speed * Time.deltaTime;
}
void OnCollisionEnter(Collision other) // 충돌 처리 함수
{
GameObject explosion = Instantiate(explosionFactory); //여기서 오류나면 이제 아래있는 코드들이 실행이 안되므로 꼬옥 enemy의 explosionFactory 프리팹에 효과 넣어주기!!
// Instantiate() : ()안에 있는 원본을 복사
// 요 코드는 그 복사한거를 explosion에다가 넘겨주는 것
explosion.transform.position = transform.position;
// 폭발 이펙트의 위치를 설정
// 폭발 위치는 = 이 스크립트가 현재가지고 있는 위치
// transform의 의미는 : 이 스크립트를 포함하고 있는 옵젝이 갖고 있는 위치값
Destroy(other.gameObject); // 다른 게임 오브젝트 파괴
Destroy(gameObject); // 자기 자신 파괴
}
}
배경
- Assets에다가 Materials(재질) 폴더 만들기
ㄴ 요게 필요한 이유는 배경 스크롤 가능하게 하려고 !
- 그후 Materials에서 우클릭 - create - Material - Mat_Background 만들기
- Mat_Background 누르고 , 그 배경 그거 가져와서 Albedo에 끌어다 놓기
- hierarchy에서 3d object - quad - Background로 이름 변경
- 아래처럼 스케일 변경 (z가 1.5인 이유는 그 0으로 하면 충돌해서 Destroy되어서 닿지 않도록 띄어주는 거임!!(3D니깐))
( 안 띄어줬을 떄 없어지는 이유가 얘가 Mesh Collider 키고 있어서,, 꺼줘도 되지 않음 근데?
- 아래처럼 Mesh Renderer-Elements에 위에서 만들어준 Mat_Background 끌어다놓기
- + 느리다면 scroll speed 0.5로 설정
Background.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 배경 스크롤
public class Background : MonoBehaviour
{
public Material bgMaterial;
public float scrollSpeed = 0.2f;
void Start()
{
}
void Update()
{
Vector2 direction = Vector2.up;
bgMaterial.mainTextureOffset += direction * scrollSpeed * Time.deltaTime; // 초당 0.2만큼 올라감
}
}
사운드
✔︎bullet - add component - audio source
✔︎ play on Awake : 실행될 때마다 소리 재생 시켜주는 것 ( 얘 꼭 켜져 있어야 함)
✔︎ Audio clip에 audio bullet 집어넣기
✔︎ explosion 이펙트에 audio explosion 소리 집어넣기 (과정은 위와 비슷
✔︎ BGM - background에 집어넣기 (background는 게임 시작부터 끝까지 존재하는 옵젝이므로 적합)
-과정은 위와 비슷
✔︎ 얘는 loop 꼭 켜주기 !!
실행결과
'프로그래밍 > Unity(C#)' 카테고리의 다른 글
#7 싱글톤패턴 & 오브젝트 풀 (0) | 2023.07.09 |
---|---|
#6 점수 추가 & 저장 및 불러오기 (0) | 2023.07.09 |
슈팅게임 #4 충돌처리 (0) | 2023.07.07 |
슈팅게임 - #2 총알이동, 적 이동 (0) | 2023.07.06 |
슈팅게임 - #1 플레이어 이동 (0) | 2023.07.04 |