코드네임 :

#5 폴리싱 & 이펙트 & 배경 & 사운드 본문

프로그래밍/Unity(C#)

#5 폴리싱 & 이펙트 & 배경 & 사운드

비엔 Vien 2023. 7. 8. 18:14

폴리싱

 

Window - Asset Store

비행기 어쩌고 다운로드 후 임포트..계속


✔︎ 플레이어 폴리싱

 

글고 일케 설정


 

✔︎ 에너미 폴리싱

 

Enemy 옵젝에서 Cube 랑 Mash Renderer 를 Remove 해줌


 

 

총알 폴리싱

 

✔︎  Bullet

- Bullet의 Cube와 MeshRenderer 삭제

- Transform에서 reset 누르면 원점(화면 가운데)으로 이동

- Box Collider 설정 ( Box Collider : 충돌되는 부분) , 총알크기와 비슷하도록 맞춰주는 작업

BoxCollider 설정

 

✔︎ 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로 설정

스크롤 스피드 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 꼭 켜주기 !!

 




실행결과