티스토리 뷰
이전까지는 재밌지만 막막하고 어떻게 구현해야 할까에 대한 고민이 꽤 되었는데, 프리팹을 배우고 나서는 어떻게 해야될지 감이 생기는 느낌이다. 특히 스크립트의 경우 최대한 영향이 받지 않도록 잘 구현하여 지금처럼 활용하고 드래그로 적용하기 쉽게 구현해야겠다는 생각이 든다.
오늘 만든 게임은 예제로 있는 성게 피하기 게임인데, 역시 난 컨트롤이 필요한 게임은 어렵다..
Gamelog 09_1. 프리팹 만들어보기
- 프리팹: 게임 오브젝트와 컴포넌트를 합해서 부품화한 것
- 게임을 시작한 후에 적이 점점 늘어나거나 적이나 플레이어가 미사일을 발사하는 것처럼 나중에 게임 오브젝트를 등장시키고 싶을 때 사용
- 게임 오브젝트 + 컴포넌트를
프로젝트
에 저장하는 구조
1. 게임 오브젝트 + 컴포넌트
먼저, 게임 오브젝트가 계속 움직이도록 Forever\_MoveH
스크립트를 적용한다.
2. 프리팹 만들기
Hierachy
에서 게임오브젝트를 Project
로 드래그하여 프리팹을 만든다.
프리팹을 만들면 맨 오른쪽처럼 회색 배경의 오브젝트가 생성된다.
3. 실행해보기
만든 프리팹을 씬으로 드래그하여 여러개 생산한다.
일반 오브젝트와 다르게 파란색으로 `Hierachy`에 표시된다.
실행하면 전체 다같이 앞으로 움직이는 게임 오브젝트를 확인 가능하다.
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);
아무것도 없는 상태에서 프리팹이 등장해야 할 때는, 없어지지 않는 게임 오브젝트인 Main Camera
에 스크립트를 적용한다.
스크립트를 적용하면, 위와 같이 New Prefab
변수에 등록할 수 있으며, 우측 작은 동그라미를 클릭하면 Select GameObject
를 통해 미리 생성한 프리팹을 선택할 수 있다.
클릭하면 프리팹이 생성된다.
프리팹은 왔다갔다 움직이도록 스크립트를 지정해주었으며, 애니메이션도 지정하여 움직이게 했다.
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);
성게게임 만들기
이때까지 배운 것들을 활용하여 성게 피하기 게임을 만들었다.
- Scene 구성하여 GameStart 클릭시 MainGame으로 이동
- MainGame에서는 구름에서 성게가 랜덤한 위치에 생성되며, 일정한 시간 이후 삭제됨
- 성게와 캐릭터는 애니메이션 및 box collider, rigidbody 적용함
- 성게 프리팹에 캐릭터 오브젝트와 부딪힐 경우 Gameover 씬으로 이동하도록 적용
'프로그래밍 > Unity' 카테고리의 다른 글
Gamelog 11. 중력으로 던진다 (0) | 2023.02.14 |
---|---|
Gamelog 10. 중력을 이용해본다 (0) | 2023.02.06 |
Gamelog 08. 미니 게임 완성했다. (0) | 2023.01.29 |
Gamelog 07. 드디어 움직인다. (0) | 2023.01.28 |
Gamelog 06. Main Camera를 지웠다. (0) | 2023.01.28 |