티스토리 뷰

반응형

Gamelog 09. 뭔가 하는 느낌이다.

이전까지는 재밌지만 막막하고 어떻게 구현해야 할까에 대한 고민이 꽤 되었는데, 프리팹을 배우고 나서는 어떻게 해야될지 감이 생기는 느낌이다. 특히 스크립트의 경우 최대한 영향이 받지 않도록 잘 구현하여 지금처럼 활용하고 드래그로 적용하기 쉽게 구현해야겠다는 생각이 든다.
오늘 만든 게임은 예제로 있는 성게 피하기 게임인데, 역시 난 컨트롤이 필요한 게임은 어렵다..

 

Gamelog 09_1. 프리팹 만들어보기

  • 프리팹: 게임 오브젝트와 컴포넌트를 합해서 부품화한 것
    • 게임을 시작한 후에 적이 점점 늘어나거나 적이나 플레이어가 미사일을 발사하는 것처럼 나중에 게임 오브젝트를 등장시키고 싶을 때 사용
    • 게임 오브젝트 + 컴포넌트를 프로젝트에 저장하는 구조

1. 게임 오브젝트 + 컴포넌트

Unity 프리팹

먼저, 게임 오브젝트가 계속 움직이도록 Forever\_MoveH 스크립트를 적용한다.

2. 프리팹 만들기

Unity 프리팹

Hierachy에서 게임오브젝트를 Project로 드래그하여 프리팹을 만든다.
프리팹을 만들면 맨 오른쪽처럼 회색 배경의 오브젝트가 생성된다.

3. 실행해보기

Unity 프리팹

만든 프리팹을 씬으로 드래그하여 여러개 생산한다.
일반 오브젝트와 다르게 파란색으로 `Hierachy`에 표시된다.
실행하면 전체 다같이 앞으로 움직이는 게임 오브젝트를 확인 가능하다.

Unity 프리팹

Hierachy에서 보이는 화살표를 눌러 확인해보면, Prefab 화면으로 전환된다.
아직 어떻게 하는지는 모르겠다.ㅎ

4. 스크립트로 프리팹 만들기

# Inspector 창에서 Prefab 등장
public GameObject newPrefab;
GameObject newGameObject = Instantiate(newPrefab) as GameObject;

# Prefab을 지정 위치에 겹쳐진 부분이 앞쪽이 되도록 등장
Vector3 pos = <표시할 위치>;
pos.z = -5; // 앞쪽에 표시
newGameObject.transform.position = pos;

 

Gamelog 09_2. 터치하면 등장

마우스로 터치한 위치 = 디스플레이상에서의 위치

프리팹 등장 위치 = 카메라 안에서의 위치

var pos = Camera.main.ScreenToWorldPoint(Input.mousePosition + Camera.main.transform.forward);

Unity prefab

아무것도 없는 상태에서 프리팹이 등장해야 할 때는, 없어지지 않는 게임 오브젝트인 Main Camera에 스크립트를 적용한다.

Unity Prefab

스크립트를 적용하면, 위와 같이 New Prefab 변수에 등록할 수 있으며, 우측 작은 동그라미를 클릭하면 Select GameObject를 통해 미리 생성한 프리팹을 선택할 수 있다.

Unity Prefab

클릭하면 프리팹이 생성된다.
프리팹은 왔다갔다 움직이도록 스크립트를 지정해주었으며, 애니메이션도 지정하여 움직이게 했다.

 

Gamelog 09_3. 때때로 등장하고 삭제

public GameObject newPrefab;
public float intervalSec=1;

void Start() {
    InvokeRepeating("CreatePrefab", intervalSec, intervalSec);    // 반복
}

void CreatePrefab() {
    Vector3 area=GetComponent<SpriteRenderer>().bounds.size;

    Vector3 newPos=this.trasnform.position;
    newPos.x += Random.Range(-area.x/2, area.x/2);
    newPos.y += Random.Range(-area.y/2, area.y/2);
    newPos.z = -5; // 앞쪽에 표시

    GameObject newGameObject = Instantiate(newPrefab) as GameObject;
    newGameObject.transform.position = newPos;
}

프리팹이 계속 생성되면, 화면 밖으로 나가더라도 메모리를 소비하기 때문에 게임의 처리속도가 느려진다.
따라서, 스스로 삭제되는 스크립트가 필요하다.

Destroy(this.gameObject, limitSec);

 

성게게임 만들기

이때까지 배운 것들을 활용하여 성게 피하기 게임을 만들었다.

  1. Scene 구성하여 GameStart 클릭시 MainGame으로 이동
  2. MainGame에서는 구름에서 성게가 랜덤한 위치에 생성되며, 일정한 시간 이후 삭제됨
  3. 성게와 캐릭터는 애니메이션 및 box collider, rigidbody 적용함
  4. 성게 프리팹에 캐릭터 오브젝트와 부딪힐 경우 Gameover 씬으로 이동하도록 적용

Unity Prefab

 

반응형
댓글