-
[Rollick 개발 일지] 01. 간단한 기능 구현카테고리 없음 2023. 10. 20. 01:35
유튜브에서 우연히 Subway Surfers플레이 영상을 보게 됐다.
괭장히 빠른 속도에서도 여유럽게 장애물을 넘어가는 것을 보고 대단하다고 생각이 들었지만 한 편으로는
'조금 더 아슬아슬하게 피하면 짜릿하고 보는 맛도 살지 않을까?' 라는 생각이 들었다.스케이드 보드와 엮어 '장애물을 아슬아슬하게 피하면 점수를 더 주는 게임을 만드는 건 어떨까?'라는 생각을 하게 돼었고
위의 생각을 토대로 아이디어를 다듬어 게임을 제작하기로 했다.
에셋을 다운받아 내가 원하는 형태로 맵을 배치해 보았다. 맵이 뒤쪽으로 이동해 스케이트 보드가 맵을 달리는 기능 또한
간단하게 구현했다.
[SerializeField] private Transform _baseMapObj; public float _moveSpeed; private void Update() { _baseMapObj.Translate(Vector3.left * _moveSpeed * Time.deltaTime); }
하지만 코드를 이렇게만 작성한다면 맵이 무한히 뒤쪽으로 이동하기 때문에 카메라 밖으로 벗어났을 때 스케이트 혼자
둥둥 뜨는 현상이 발생한다.
해결법은 맵2개를 이어붙인 후 카메라를 완전히 벗어난 맵을 카메라에 보이고 있는 맵 앞쪽에 붙여주면 된다.
잘 작동한다. 아래는 위에서 설명한 로직을 바탕으로 작성된 코드이다.
public class MapMoveFunc : MonoBehaviour { [SerializeField] private Transform[] _maps = new Transform[2]; [SerializeField] private float _limitPos; [SerializeField] private float _mapLength; public float _moveSpeed; private Transform _currentShowMap; private int _mapIdx = 0; private void Awake() { _maps[1] = Instantiate(_maps[0], GameObject.Find("MapTrans").transform); _maps[1].position = _maps[0].position + new Vector3(260, 0, 0); _currentShowMap = _maps[_mapIdx]; } private void Update() { for(int i = 0; i < _maps.Length; i++) { _maps[i].Translate(Vector3.left * _moveSpeed * Time.deltaTime); } if(_currentShowMap.transform.position.x <= _limitPos) { _currentShowMap.transform.position += new Vector3(_mapLength * 2, 0, 0); _mapIdx++; if (_mapIdx == _maps.Length) _mapIdx = 0; _currentShowMap = _maps[_mapIdx]; } } }
다음 포스팅은 맵이 앞 위치로 이동할 때 배치된 자동차 장애물들과 가장자리의 건물들이 랜덤으로 배치되도록 하는
코드를 작성하겠다.
다음 포스팅에서 뵙겠습니다.
(깃허브 링크)
- https://github.com/janghawon/Rollick
(사용한 에셋 링크)
- https://assetstore.unity.com/packages/3d/environments/simplepoly-city-low-poly-assets-58899
- https://assetstore.unity.com/packages/3d/vehicles/land/bicycle-scooter-skateboard-170056