일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- react
- 게임개발
- springboot
- jwt
- 게임
- 깃
- frontend
- 스프링부트
- express
- 코딩
- MongoDB
- bcrypt
- RiotAPI
- netlify
- 프로그래밍
- c#
- OAuth2.0
- 유니티
- 스프링
- 백엔드
- AWS
- 백준
- JSON
- node.js
- oAuth
- spring
- IntelliJ
- 파이썬
- unity
- Python
- Today
- Total
Unwound Developer
유니티 - 2D 런 게임, 자동으로 발판 생성하기 본문
저는 저번 닷지 프로젝트처럼 발판 생성기를 두고 계속해서 랜덤으로 생성할 줄 알았어요.
하지만, 계속해서 발판을 실시간으로 생성하거나 파괴하는 Instantiate나 Destroy 메소드를
많이 사용하게 되면, 성능에 문제가 생길 수도 있다고해요.
그래서 이번엔 오브젝트 풀링이라는 기술을 사용한대요.
초기 실행시에 필요한 만큼 오브젝트를 생성하고, 필요할 때마다 활성화 한 뒤 가져와서 쓰는거에요.
그리고 필요 없을때는 파괴하는 대신 비활성화하고 풀에 반환하는거죠.
이렇게 생긴 플랫폼 프리팹이 제공되었어요.
가시는 밟으면 죽을거같네요.
플랫폼의 스크립트에요.
저 가시 세개를 배열로 가지고있고, 플레이어가 이미 밟은 발판인지를 판별할 bool타입 변수도 있습니다.
OnEnable 메소드는 오브젝트가 활성화 될 때마다 실행되는 메소드에요.
발판이 활성화가 되면, stepped를 false로 초기화해요.
그리고 아까 변수로 장애물 오브젝트를 배열로 가지고 있죠??
Range(0,3)을 통해서 1/3 확률로 obstacle(가시) 오브젝트를 각각 활성화해줘요.
Random.Range(0,3)은 0,1,2중에 하나를 랜덤으로 반환해주거든요.
그게 0일 확률이니까 1/3이에요.
여기서 Start메소드를 안쓰고 OnEnable을 사용하는 이유가 있습니다.
오브젝트 풀링 때문입니다.
만약에 이렇게 플랫폼을 Start메소드를 통해서 3개를 생성해 돌려쓴다고하면,
플랫폼 3개가 무한반복으로 나오는거에요. 이건 문제가 있겠죠...
하지만, OnEnable을 사용한다면 오브젝트가 풀에서 들어가고 나올때마다 비활성화 > 활성화를 거치기 때문에,
obstacle이 다시 랜덤으로 생성됩니다.
그래서 서로 다른 플랫폼이 무한대로 나오는거에요.
다음은, 자신을 밟을 때마다 1점씩 추가해주는 간단한 메소드에요.
stepped 변수를 통해서 같은 플랫폼이 점수를 두번 주지는 않습니다.
여기까지가 플랫폼 스크립트이고, 플랫폼 오브젝트에 이 스크립트와 ScrollingObject 스크립트까지 적용시켜주면돼요.
이제 플랫폼 생성기 스크립트를 볼게요.
닷지에서 BulletSpawner와 유사한 부분이 상당히 많아요.
마지막 배치시점과 다음 배치까지의 시간간격을 랜덤으로 가져와서 생성하는 부분은 timeBet 변수들이 담당해요.
이 부분이 닷지 총알생성과 유사하네요.
그리고 count =3 이라고 되어있는데, 아까 말한 오브젝트풀에 발판을 3개 생성해둔다는 뜻이에요.
그리고 y축은 랜덤이어야 더 어려울거에요. 계속 같은 높이로만 생성된다면 지루해요.
현재 게임이 진행된 시간 >= 마지막으로 발판이 생성된 시간 + 랜덤 생성간격 이 되는순간에 발판을 생성해요.
닷지와 비슷합니다.
그리고 첫번째 발판을 비활성화 -> 활성화하고 transform.position을 통해서 순서대로 배치해요.
마지막 발판까지 사용했으면 다시 첫번째 발판으로 돌아와 비활성화->활성화를 반복해요.
무한대로 발판이 나올겁니다.
이제 각 오브젝트에 스크립트를 적용하기만 하면 끝이에요.
너무 작은 부분들은 올리지 않고, 중요하다고 생각한 부분들만 올리게 되었네요.
전부 올리기엔 작은 부분들이 너무 많네요.
이번 프로젝트는 여기까지입니다. 제가 사용하는 책의 다음내용은 3D 좀비 서바이벌 게임이래요.
'Unity > Unity, C#' 카테고리의 다른 글
Unity - 2D 런 게임, 추가/변경사항 (0) | 2022.01.24 |
---|---|
유니티 - 2D런게임, PlayerPrefs 와 Slider (0) | 2022.01.19 |
유니티 - 2D 런 게임, 싱글턴 GameManager (0) | 2022.01.12 |
유니티 - 2D 런 게임, ScrollingObject (0) | 2022.01.12 |
유니티 - 2D 런 게임, 플레이어 스크립트 (0) | 2022.01.11 |