목표 |
스크립트에서 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);
}
}
'응용프로그래밍 > 유니티기초' 카테고리의 다른 글
[유니티기초] 1-08.유니티 객체 삭제 (0) | 2022.05.30 |
---|---|
[유니티기초]1-07. Random.Range 를 이용하여 랜덤한 위치에 객체 생성 (0) | 2022.05.30 |
[유니티기초]1-05. 프레임에 따라 update 되는 속도가 다른 것을 어느 컴퓨터에서나 동일한 속도를 보장 하는 deltaTime (0) | 2022.05.30 |
[유니티기초] 1-04. 게임오브젝트 충돌 처리 (0) | 2022.05.30 |
[유니티 기초]1-03.오브젝트를 키보드로 이동 시켜 보자. (0) | 2022.03.28 |