2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

응용프로그래밍/유니티기초

[유니티기초]1-06.스크립트를 이용하여 객체 생성

파아란기쁨1 2022. 5. 30. 13:53
반응형
목표

스크립트에서 Instantiate() 함수를 이용하여 필요할 때 객체를 생성하는 방법을 익혀 보자.

 

이론

게임에서 객체를 생성하기 위해서는 원본을 이용하는 것이 아니라 프리팹(Prefab)을 이용하여 생성하게 된다.

 

1. 프리팹(Prefab)이란?

게임에 존재하는 게임오브젝트를 Project View 에 파일로 저장해 둔것.

 

만드는 방법은 Hierarchy 에 있는 게임 오브젝트를 Project View로 드래그&드롭 하면 게임오브젝트가 파란색으로 변경이 된다.

 

하이어라키의 Circle을 프리팹으로 만든 모습

 

2. Instantiate 의 매개변수

GameObject : 생성할 프리팹 객체

Vector3 : 생성할 위치

Quaternion : 생성할 때 바라보는 방향

 

 

 

이렇게 만들어진 Circle 프리팹을 이용하여 스크립트를 이용하여 복제하여 생성하는 작업을 수행해 보자.

 

실습

하이어라키의 Circle 을 삭제 한 후 생성할 위치인 게임오브젝트를 하나 생성하자.

게임오브젝트에 다음과 같이 스크립트를 추가한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectSpawner : MonoBehaviour
{

    public GameObject circle;
    // Start is called before the first frame update

    private void Awake() {
        //Quaternion.identity 회전값(0,0,0)
        Quaternion rotation = Quaternion.Euler(0,0,0); //각도를 나타내는 오일러를 Quaternion 으로 변환 
        Instantiate(circle,new Vector3(0,3,0),rotation); 
    }
    void Start()
    {
        
    }

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

실행을 해 보면 원이 생성 되는 것을 확인 할 수 있다.

 

생성된 복제 정보를 받아서 이름이나 색상을 변경해 볼 수가 있다.

        GameObject c1=Instantiate(circle,new Vector3(0,3,0),rotation); 
        c1.name = "동그라미1";
        c1.GetComponent<SpriteRenderer>().color = Color.yellow; //생성된 객체 색상 변경
        c1.transform.position = new Vector3(-3,3,0); //생성된 객체 위치 변경
        c1.transform.localScale = new Vector3(2,2,0); //생성된 객체 크기 변경

 

- 총알과 같이 생성 후에 어떤 한 방향으로 발사 되는 것을 구현해 보자.

생성된 원의 스크립트를 다음과 같이 생성

 

Rigidbody2D 를 이용해서 이동하는 방법

    Rigidbody2D rb;
   
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        rb.AddForce(new Vector2(10, 0));
    }

Position 을 이용해서 이동하는 방법

    void Update()
    {
        transform.Translate(new Vector3(1 * Time.deltaTime, 0, 0));
    }

 

 

 

연습문제

1. 만들어진 Circle 을 여러개 다양한 위치에  다양한 색상으로 생성하는 스크립트를 만들어 보자.

 

2. 다음과 같이 10 * 10 개의 격자 형태로 생성해 보자

더보기
for(int y=0;y<10;y++){
            for(int x=0;x<10;x++){
                Vector3 position = new Vector3(-4.5f + x,-4.5f + y,0);
                Instantiate(circle,position,Quaternion.identity);
            }
        }

 

반응형