GameDevelop/Unity기초쌓기

[Unity] 장애물(square) 반복생성 - Prefab, InvokeRepeating, Instantiate

도도돋치 2025. 4. 6. 16:42
Contents 접기
728x90

장애물 중력, 충돌구현 

Hierarchy우클릭 > 2D Object > Sprites > Square

Position Y: 3

중력구현

Square Inspector의 AddComponent > Rigidbody 2D

Order in Layer: 1 (Shield, balloon도 적용)

 

충돌구현

Square: Box Collider 2D

Shield: Circle Collider 2D

Balloon: Circle Collider 2D

 

장애물(스퀘어) 위치, 사이즈 랜덤

Square Script
void Start()
{
    // 시작 위치 랜덤
    float x = Random.Range(-3.0f, 3.0f); // 최솟값, 최댓값
    float y = Random.Range(3.0f, 5.0f);

    transform.position = new Vector2(x, y);  //x값, y값

    // 스퀘어 사이즈 랜덤
    float size = Random.Range(0.5f, 1.5f);
    transform.localScale = new Vector2(size, size); // size아니고 localScale해야 size에 접근가능/ x값, y값 
    
}

 

📌 X(-3~3) Y(3~5)

📌 square script 생성 후 square에 붙여주기 

 

장애물(스퀘어) 여러개 생성

게임의 전체적인 진행을 관리해주는 곳 => 게임매니저

  • Hierarchy우클릭 > Create Empty > GameManager생성
  • Script우클릭 > C# Script > GameManger생성 
  • GameManager오브젝트에 GameManger 스크립트 붙이기 

 

반복생성을 위한 Square를 Prefab으로 만들기
  • Asset폴더에 Prefabs폴더 만들기 
  • Hierarchy에 있는 Square오브젝트를 Project의 Prefabs폴더로 끌어옮겨주기
  • 옮긴후 Hierarchy에 있는 Square는 지우기

 

 GameManager Script
public class GameManager : MonoBehaviour
{
    public GameObject square; //프리팹을 변수에 넣어둠

    void Start()
    {
        InvokeRepeating("MakeSquare", 0f, 1f);   // 함수이름, 언제실행시킬건지(바로 실행시 0f), 얼마만큼 자주 실행시킬건지
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    void MakeSquare()
    {
        Instantiate(square);    //스퀘어 프리팹 생성 
        //Debug.Log("생성한다");
    }
}

반복적으로 무언가를 실행시키는 함수 InvokeRepeating(문자열 메소드이름)

void MakeSquare함수를 생성하기

제대로 생성되는지 확인을 위해 MakeSquare에 Debug.Log("생성한다")를 적어 확인

 

프리팹을 반복적으로 생성하기 위해 프리팹을 변수에 넣어놔야함 

프리팹을 생성하는 코드 Instantiate

 

유니티로 돌아와서, 

게임매니저에 Prefab을 넣어줘야함

Prefab에 있는 square를 GameManager의 square변수에 드래그 앤 드롭

 

결과화면

 

 

 

728x90