-
스파르타 유니티심화주차 개인과제게임 개발기록 2024. 6. 18. 12:21
가장 쉽다고 하는 길건너 게임 같은 거를 만들어 보자.
일단 맵 부터 만들었다.
일단 바닥만 쫙 깔아두기.., 최대한 간단하게...ㅎㅎ 내가 봤을 땐 맵 이렇게 만드는 거 아닌 거 같다. 10비효율적이다.
이마저도 블로그 안 봤으면 일일히 깔았을듯..., 예전에 우연히 타일맵 봤어서 다행이다
그리고 이제 캐릭터 만들고 움직이게 하자
초간지 캐릭 발견..,
인풋시스템을 활용한 움직임 구현 .., 와 이런 기본적인 것도 기억이 안 나서 40분 정도 걸린 것 같다. 나 진짜 심각한데 지금 ㅋㅋ .. 어떡해
좌우 이동 할 때 캐릭터 방향도 같이 바뀌게 하고 싶은데 이건 좀 고민 해봐야겠다.
이제 자동차 만들고 계속 왔다갔다 하게 해야겠다.
에셋 구해서 아주 간단하게 만든 자동차.,움직이기.
시작 할 때 현재 위치에 따라 움직이는 방향을 설정하게 했는데 나중에 오브젝트풀을 사용 할 거라 이부분은 따로 바꾸던가 해야겠다.
흠 어떻게 해야 좋을까. 그냥 오른 쪽, 왼 쪽 출발 자동차들을 따로 만들어야 하나 ..,
++++++++++ // 스타트에서 사용하던 것을 나중에 OnEnable 을 사용해서 활성화 될 때 이동방향, 차의 회전을 적용 시키게 해서 내가 생각 하는 대로 구현 했다. 그리고 이 Enable에 대해서 주의사항이 있는 것으로 알고 있었는데 튜터님의 특강 중 비활성화를 해줘야 한다고 들었었다. 그 때는 무슨 말인지 몰랐으나 인풋 시스템 특강중에 하셨던 말이였는데 인풋시스템에는 이벤트를 등록한다.
OnEnable에서, 이 때 비활성화 될 때 이 이벤트를 없애주지 않으면 이벤트가 중복 등록 되므로 문제가 발생 한다.
그래서 OnEnable로 이벤트를 추가 시키는 것을 했을 경우에 OnDisable에서 추가시킨 이벤트를 빼주는 것도 추가를 시켜줘야 한다. 안 그러면 중복으로 등록 돼서 문제가 발생!
==============
이제 자동차 오브젝트를 만들었으니 프리펩으로 만들어서 자동생성을 어떻게 할지 고민을 해봐야겠다. 일단 오브젝트 풀을 이용해서 생성 파괴를 반복 할 것이니 이걸 생각을 해봐야 한다.. 흠
==== 6월 16일
맵도 오브젝트풀을 사용해서 자동으로 생성 하는 것이 어떻냐는 은밀한 조언을 얻었다. 그거를 듣고 고민을 해보았는데 맵을 하나 만들고 거기에 차 생성 하는 오브젝트도 만들어 두고 그 맵을 계속 생성 하게 하면 차 생성 하는 것도 일일히 깔 필요가 없을 것 같다..!
문제는 이 맵이 어떻게 하면 자동으로 생성 되게 할까인데, 음 지금 생각은 맵 끝에 컬라이더영역을 만들고 거기에 충돌 하면 맵을 생성 하게 하면 되지 않을까 생각 중인데 일단 해보자.
우선 기존에 만들었던 맵을 과감하게 삭제..,
처음 부분만 남기고 다 지웠다. 그런데 원래 드래그로 쉽게 지웠는데 왜 갑자기 드래그가 안 되는지 일일히 노가다 했고,, 이제 맵을 만들어 보자.
일단 보이는 게임화면에 빈 땅이 보이면 안 되니까 사진의 맵크기만큼을 갖고 있는 땅을 만들어줘야 한다.
크기가 똑같진 않겠지만 일단 빈 땅을 만들어 두고 이제 맵에다가 여러가지 넣어보자
우선 플레이어가 바깥으로 나가지 못 하게 충돌영역을 만들어줬다.
그 다음에 차가 돌아다닐 영역에 색 넣어줬다.
근데 맵 만드는 거 사람이 할 일 아니다. 힘든 거 같다. 색만 바꾸는 데도 오래 걸렸다.. ㅋㅋ
이제 저 검은 영역에 자동차 생성 해주는 오브젝트를 만들어 놓자.
이런 느낌으로 가게 하고 싶은데 흠 일단 빈객체 만들고 생성 하게 하는 거 간단하게 일단 만들어 놔봐야겠다.
이제 스크립트 작업 해준다.
일단 차 생성 하는 위치는 원하는 대로 됐는데 문제가 발생 했다. 바퀴가 안 따라온다.
확인 결과.., 만드는 차가 아닌 미리 만들어져 있던 오브젝트가 공중분해 돼있는 것을 확인 했다.
오브젝트를 움직일 땐 꼭 부모객체로 움직여야 하는 것을 유의하자.
이제 차 생성 하는 오브젝트를 복사해서 배치 해주자
이제 차끼리 부딪히면 안 되니까 한 개씩 삭제 해주면 된다.
으음 만족이다. 자동차가 생각대로 생성이 되니까 이제 계속 생성을 하게 하고, 자동차들을 프리펩으로 만들어서 종류 랜덤 생성, 등등을 하면 될 것 같다.
그리고, 동전?. 이랑 닿으면 터지는 파티클도 하라고 하는데 그거 넣어야 겠다.
그전에 문제를 발견 했다.
차가 약간 떠있다. 왜 이러지. Rigidbody로 인해 땅에 닿아야 하는 걸로 알고 있는데 아닌가, 저번에도 생성이 돼있는 건 적용이 안 되던 게 있던데 그거 물어본다는 걸 깜박해서, 일단 지금은 이런 것보다 다른 것을 먼저 해야겠다. 디테일은 나중에
오브젝트를 넣을 때 위치가 약간 올려져 있는 상태에서 넣어서 그런 것 같긴 한데 왜 적용이 안 되는지 알아봐야겠다.
일단 지금은 자동차 무한반복을 먼저 해야겠다.
먼저 자동차를 프리펩으로 만들어 주기 위해 작업을 완료 해준다. 벽에 닿으면 비활성화 되게 하고, 활성화 됐을 때 size와 속도를 랜덤하게 적용 되게 해줬다.
이 size나 속도를 스크립터블 오브젝트로 사용 하고 뭐 ... 등등등 하라는데 무슨 소리인지 이해가 안 간다. 어찌 됐든 하나의 오브젝트가 자동차 여러개를 생성 하면 되게 하는 것이니 그렇게 해보자.
일단 자동차들을 여러개 만들고 컬라이더도 설정해줘서 프리펩으로 만들어 준다.
이제 오브젝트풀이 만들 때 여깄는 것들 중에 랜덤으로 만들어두면 되는 거니까, 근데 나는 활성화 될 때 차모양이 랜덤하게 적용 되게 하고 싶은데 그게 되려나 일단 메쉬렌더러....일단 지금은 시간이 없다. 일단 구현
게임매니저가 오브젝트풀을 생성하게 하려다가 맵마다 오브젝트 풀을 생성 하면 좋을 것 같아서 맵 오브젝트에 생성이 되게 할거다. 아닌가.., 흠
아니다 지금은 맵이 자동생성과 해제가 반복 되는 것을 먼저 해야 할 것 같다. 알아보자.
++++++
하 머가 이렇게 복잡한지. 복잡한 게 아닌가?,,
나는 맵이 생성 되게 하는 것을 Trigger를 이용해서 했다. 그리고 맵이 없어지게 하는 것도 Trigger로 할 예정.
이 맵이 자동 생성 되는 것은 포지션값만 신경 써주면 되는데 나는 오브젝트 위치 직접 움직이고 크기 계산해서 적용 했지만 알아서 오브젝트의 길이를 계산 해주는 것도 있다.
GetComponent<Renderer>().bounds.size.z; 를 사용하면 변수 안에 길이를 계산 해서 반환 해준다고 한다.
큐브와 닿을 경우에 위치 계산 해서 맵을 생성 하게 하는 것으로 생성과 파괴를 하게 했다.
처음에 파괴 되는 큐브를 맵 안에 넣었더니 맵 나가기도 전에 바닥이 사라져서 큐브 한 개가 덩그라니 위에 있는 것을 볼 수 있을 것이다. 보통 Update를 사용해서 맵생성과 해제를 하던데 나는 Update를 최대한 쓰고 싶지 않아서 Trigger로 해봤는데 문제가 좀 있는 것 같다.
일단 분명 뒤로 가는 경우도 있을 것인데 뒤로 가면 삭제 됐던 거 다시 만들어지던가 해야 하는데, 아 일단 이런 디테일은 나중에 지금은 구현이다.
지금 생각해보면 엄청 간단한데 어렵게 생각해서 그런지 오래 걸렸다. 내 시간.
이제 맵이 어떤 식으로 자동생성 되는 것이 확인이 됐으니까 자동차를 어떻게 생성 해낼 것인지랑 동전과 뭐 꾸미는 오브젝트들이 랜덤하게 생성 하게 하고 UI들만 하면 될 것 같다.
==
일단 자동차 생성을 심화강의 포션 생성 하던 것처럼 하려고 한다.
미리 만들어둔 큐브들 위치를 모아서 한 개 부모객체 만들고 거기서 자식객체위치에 생성을 하게 하려고 한다.
이렇게 코루틴 만들어서 계속 소환 하게 하려 했는데 문제가 좀 있다.
일단 반복도 안 되고, 차들 움직이는 게 이상하다. 무언가 문제가 있다.
====
일단 반복이 안 되는 문제는 내가 코드를 잘 못 적은 것으로 확인이 됐다. 부끄럽게도 코루틴을 잘 못 이해하고 있었다..ㅋㅋ
코루틴은 계속 반복 되는 것으로 왜 생각 하고 있었지?,,,, 아무튼 저 차를 생성 하는 코드 자체를 반복문으로 한 번 더 덮어줘서 반복을 계속 하게 했다. 그런데 차가 생성 될 때 위치에 맞게 방향을 바꿔야 하는데 아직 고쳐지지 않았다.
(그리고 처음에 position값을 Transform을 이용해서 바꿨는데 Vector3로 바꿨다. 왜냐하면 화면을 보니까 이 tranform이 생성한 자동차를 그대로 따라갔다. 아마 참조형이라? 그런 것 같았다. 그래서 Vector3로 바꿔서 Awake일 때 시작위치를 Vector3로 저장해서 그 곳에서 계속 생성하게 했다.)
그리고 자동차가 다시 생성 됐을 때 이동방향과 회전이 안 되는 거 이것을 수정해줘야 한다.
Car 스크립트를 확인 해야겠다. 내가 OnEnable을 잘못 사용 하고 있는 것 같다.
진짜 문제가 뭐지
==
문제 찾다가 유니티 꿀팁을 찾았다. 게임 실행중일 때 스크립트가 바뀌면 실시간 적용이 된다.
이로 인해 무엇이 문제인지는 확인을 했다. .. 코드는 문제가 없다.. 그렇다면 무엇이 문제일까.
아마 저 Enable은 오브젝트 풀로 생성이 될 때 실행이 될 것이다. 그리고 다시 SetActive가 되면 또 실행이 돼야 하는데 이게 안 된다. 왜 안 될까. 이유가 뭘까
============
Enable이 제대로 실행이 되지 않는 이유를 찾았다!
ObjectPool 스크립트를 보면
public GameObject SpawnFromPool(string tag)
{
if (!PoolDIctionary.ContainsKey(tag))
{
return null;
}
GameObject obj = PoolDIctionary[tag].Dequeue();
PoolDIctionary[tag].Enqueue(obj);
obj.SetActive(true);
return obj;
}obj.SetActive(true); 라는 코드가 섞여 있는 것을 볼 수 있다. 이것때문에 여기서 OnEnble이 호출 되면서 문제가 생긴 것이었다.
그러니까 포지션을 바꾼 다음에 OnEnable이 호출 되어야 하는데 이게 호출 되고 나서 포지션이 바뀌니까 방향이 변경 된채로 생성이 된 것이었다. 그래서 코드를 이렇게 수정 했다.
오브젝트풀 코드가 저렇게 된 이유는 이유가 있을 거라고 생각해서 저걸 지우진 않았고 포지션 값 바꾸기 전에 SetAcitve(false) 하는 코드를 추가 시켜줬다.
코드 수정을 하니 제대로 작동이 되는 것을 볼 수가 있다.
이제 자동차 랜덤 생성..! 현재 생성 되고 있는 자동차 오브젝트를 자동차 랜덤으로 만들게 하는 오브젝트로 바꿔주면 된다... 얼마 안 남았다.
일단 급한대로 Intantiate를 두 번 하는 흉악한 방법을 사용 했는데 문제가 발생 했다.
아주 그냥 자기들 멋대로 움직인다. 이번엔 문제가 뭘까..
아마 프리펩이랑 프리펩을 생성 하는 스크립트를 합쳐야 하는 것 같다. 그러면 잠깐만, 컬라이더만 냄겨두고 싹 다 옮겨야겠다.
이것만 냄겨두고 다 옮겨준다.
그 다음에 프리펩에 넣어놨던 rigidbody를 싹 다 제거해주고 부모객체에 rigidbody 추가 후에 스크립트를 적용 시켜줬다.
그러니 제대로 움직여지는 것을 확인 했다.
그런데 스폰위치가 다 자기멋대로다... 노가다작업이 필요한 것 같다..위치 다 잡아줘야겠다..,
그리고 한 오브젝트에 스크립트를 나눠서 넣어두면 안 좋은 것을 안다.. 너무 불편하다. 하지만 collider가 자동차 모양마다 다르게 적용 돼야 하는데 지금 내레벨엔 안 떠오른다. 아니 떠올릴 수야 있겠지만 일단 지금은 넘어간다. 자식객체의 컬라이더를 가져오면 되나? 갖고 올 수 있나.
===============
일단 다행히도 노가다를 할 뻔 했지만, 프리펩들의 Position을 다 reset 시켜서 문제를 해결했다 휴 ㅎ.
역시 무엇인가를 하기전에 확인을 한 번 하는 습관은 좋은 것이다.
차가 바닥에 박혀있어서 스폰위치를 살짝 올려주는 것까지만 하고, 일단 자동차까지 마무리 해야겠다. 이제 간단한 것들만 남았다.
코인 먹기, 폭죽 터뜨리기, UI등만 하면 된다.
=======6월 17일
지금 보니 문제가 좀 생겼다. 맵을 미리 만들어 두면 자동차가 잘 생성이 되는데 프리펩이 생성 되고 자동차가 나오는 거는 이상하게 나온다.
왜 이럴까.. 흠 포지션이 -가 되는 것도 아니고 기준이 이상하게 잡히는 것 같다. 같은 Y값 0인데 저기로 나온다. 이유가 뭘까. 그리고 나는 컬라이더로 SetActive false가 되는 것을 했는데 자식객체에 collider가 들어있다.
그래서 컬라이더가 있는 자식객체만 오브젝트가 비활성화 되는 것을 확인 했는데 transform.parent.gameObject.SetActive(false); 이 코드로 부모오브젝트까지 같이 비활성화 하게 할 수 있었다.
일단 자동차 생성에 또 문제가 생겼는데 아마 코드 순서가 좀 잘 못 된 것 같다. 애초에 내가 구조를 이상하게 잡아서 이런 것 같다.. 잠시 고민을 해보자.
지금 Start와 Enable을 같이 쓰고 있는데 같이 쓰면 문제가 되는 걸까라고 생각을 했다. 문제는 없었고 호출순서가 Enable이 더 빠른 것을 알았다. 이것을 유의하며 코드를 수정 하면 될 것 같다.
호출순서 : Awake -> Enable -> Start
+++++
문제를 찾았다..! 문제는 호출 순서가 맞았다. 그런데 내가 찾진 못 했고 튜터님께서 찾아주셨다.
문제의 원인은 그거였다. 나는 자동차를 생성 하는 오브젝트가 실행 될 때(Start) 현재 위치를 Vector3에 담게 하고 그 Vector에 계속 자동차가 활성화 되게 했었다.
그래서 생긴 문제라고 볼 수가 있는데
일단 맵 자체가 y값 0보다 아래에 생성이 되었다가, 0으로 올라왔다.
0으로 올라온 다음에 Vector3의 값을 저장하면 문제가 안 됐겠지만 맵이 올라오기 전에 Vector3에 위치를 저장했고 그래서 동영상과 같이 자동차는 계속 아래에서 생성을 했던 것이었다.
그래서 초기화 하는 부분을 다르게 적용 했다.
그러니까 지금 오브젝트풀을 이용해서 오브젝트가 생성이 되고 Awake와 Start가 실행이 되게 된다. 이 때 Vector3의 값을 저장 하게 되는데 이 Start와 Awake코드를 Initilaize라는 함수로 합쳐주고 이것을 맵이 생성 되고난 이후에 값을 넣어주게 바꿔줌으로서 문제가 해결 됐다.
Vector3에 저장 하는 것을 나중에로 바꾼 것이다.
그러니까 게임매니저에서 오브젝트풀을 이용해서 오브젝트를 생성하게 된다. 그러면 Vector3의 정보가 GameManager의 위치로 담기게 되는 것이다. 그래서 맵이 생성 되고 난 이후로 바꿔주었다.
애초에 왜 맵이 생성이 아래에서 됐다가 위로 바뀌는지가 의문이었는데 GameManager의 위치가 -50인가 그랬다...,
하.., 오브젝트 생성 하고 Transform을 reset하지 않는 습관 때문이었다. . (아래에서 생성이 되었으나, 맵은 올바르게 생성이 된 이유는 활성화 될 때 좌표를 아예 입력해넣었기 때문이다.)
왜 자꾸 아래에서 생성이 되나 했다. 나는 무슨 엔진문제인줄 알았으나 내 잘못이였던걸로.
이렇게 Awake와 start를 통해서 초기화를 해줄 때 조심해야 할 경우를 또 하나 깨달았고, 어떻게 해결하는지 방법이 무엇인지도 깨달을 수 있게 되었다. 지금은 초기화를 생성 될 때 하지 않고, 초기화 하는 함수를 만들어서 원하는 시점에 초기화를 하게 해주는 것으로 해결 했다.
그런데 테스트 도중 또 문제를 발견 했다.
아마 저 위치를 저장해서 저기다가 계속 생성 하는 것 같다. Calss는 참조형이기 때문에 값이 저장 돼서 그런 것 같다.
그런데 웃긴 건 저기서도 나오고 다시 깔린 맵에서도 나온다.
그러면 Enable을 조금만 수정 해주면 될 것 같다.
===
조금이 아니다 오래 걸렸다. 후우... 디버그 너무 빡쎄다.
우선 스폰포지션들 갖고 있는 List를 활성화 될 때마다 새로 작성 해주려고 했는데 이상하게 작동이 됐다. 왜 이상한고 하니 나는 이 List를 초기화 하고 새로 넣어주어야 했는데 그냥 계속 넣어서 List가 계속 늘어났다.
그래서 활성화 될 때 List.Clear를 사용해서 초기화 해준 다음에 값을 채워주게 했다. 그리고
나중에 이 List를 참고 하는 곳에서 null오류가 발생 할 수도 있기에
if (spawnPositions == null || spawnPositions.Count == 0) yield break; 코드를 추가 시켜줬다.
0은 list가 채워졌다 지워지면 null이 아니라 개수가 0개가 되어서? 인 거 같다. 아무튼 안 됨.
그리고 이 CarManager는 OnEnble을 못 쓴다.
왜냐면 자동차 생성 할 때랑 비슷 하다고 볼 수 있는데 포지션 잡아주기 전에 비활성화 해주는 것으로 해결해줬는데 이건 비활성화 못 해준다.
SetActive(false) 할 곳이 OnEnable밖에 없어서 다른 방법을 찾아야 했다. 그냥 하던 대로 Map 생성 될 때 초기화 하는 걸 사용하기로 했다.
그리고 코루틴이 혹시 한 번 시작 되면 정보가 안 바뀌는 거 아닌가 하고 코루틴 변수로 만들고 Stop, Start 계속 하게 했다.
(스폰위치가 계속 변동이 안 되는 거인가에 대한 의문)
그래서 결과적으로 맵이 재생성 될 때마다 자동차를 소환 할 위치를 변경 하게 했고 계속 확장 할 수 있게 했다.
영상을 보면 맵이 사라지고 나서도 차는 계속 나아가는 것을 볼 수가 있는데 어차피 자동차 활성화 하는 코드가 실행 되기 전에 비활성화를 하고 다시 활성화를 하기 때문에 나중에 위치 바뀐다. 참조형이기 때문에 가능한 일
이제 진짜 쉬운 코인 같은 거랑 파티클 UI 사운드만 넣으면 끝이다. 생각보다 오래 걸렸다 빨리 끝내자
동전 에셋을 찾으니까 애니메이션이랑 파티클이 다 돼있다. 이런 편한 것이?,.,,
사운드만 찾아서 추가 해줬다. 이런 편법을 사용해도 괜찮은 것인가.
이제 이 동전들이 맵 생성 됐을 때 랜덤 한 지역에 생성 되게 해주자.
++
오브젝트풀로 생성하게 하려 했는데, 좀 복잡하다 ...ㅎ;
간단방식으로 동전을 생성하게 해야겠다...
간단하지만 오브젝트풀 사용 하는 것보단 성능이 좋을 수 있는 방법...!이지 않을까.
나중에 시간이 생기면 내가 원래 하려던 방법으로도 구현을 해봐야겠다... 왜 안 되는 거지.. 코드순서의 중요성... 복잡하다.
이제 UI, 작업 하면 될 것 같다.
골드 데이터 저장 할 거 만들고 저장 할 때 텍스트 바뀌게 하고 하면 되겠지
===== 6월 18일
현재 진행 상황
시간 가는 UI랑 GameOver 판넬만 만들었다. 다 기초식으로 만들었는데 완성도 높게 만들고 싶다. 어제 쉬어가지고 ....,
일단 시간이 없으니 점수 오르는 거랑 브금 등등, 플레이어 이동제한 해야겠다.
==
먼저 플레이어 이동 제한과 깔아뒀던 길막기용들 렌더러를 없애주자.
그 다음에 할 일은 그거다. 나는 큐브 통과하면 맵 생성 되게 했는데, 그걸 계속 trigger 하면 맵이 계속 생성이 될 것이다. 이부분을 보완 해줘야 한다.
enable을 쓰면 될 것 같은데, 맞다. 저게 한 번 실행이 되면 스크립트를 꺼버리면 될 것 같다.
그리고 나중에 다시 키게 하고 등등 하면 될 것 같은데 그러한 방식으로 해본다. 그리고 뒤로 못가게 하는 벽 생성 하는 것도 enable을 사용해서 해보자.
맵을 생성한 후에 기능을 없애버리고, 그다음에 뒤로 못가게 하는 벽을 SetActive true하면 될 것 같다.
그리고 나중에 이 꺼둔 것을 다시 켜주면 된다. 어디서 켜주게 할지 고민해보면 된다.
일단 이렇게까지만 하고 테스트를 해본다.
뒤로 못 가게 하는 벽은 false 해놨다가 켜지게 함으로써 들어간 다음에 못 나가게 한거다.
생성은 제대로 되는데 왜 Trigger가 되는 거지?? 트리거도 꺼둔 것으로 확인이 됐다.
문제 발생. 하지만 일단 넘어간다. 30분 남았다.
+++
위치문제인것으로 확인. 위치가 좀 아래에 있어서 끌어올려줌으로써 문제를 해결 했다.
============
결론적으로 맵생성 하는 벽의 기능이 실행 되면 맵을 생성 후에 기능 비활성화, 그리고 뒤로 못가게 하는 벽 활성화를 해서 맵이 중복 생성이 되지 않고, 뒤로 못 가게 했다.
그리고 이건 오브젝트풀이기 때문에 이상태가 유지가 되면 안됨으로 다시 켜줘야 한다.
그래서 맵 뒷부분에 있는 맵을 삭제하는 벽의 기능이 실행 될 경우에 다시 이 맵생성하는 벽이 활성화 되게 했고, 또 뒤로 못 가게 하는 벽을 활성화 하게 했다.
그리고 공통적으로 이 뒤로 못 가게 하는 벽은 이 벽들이 활성화 돼있을 때는 켜있으면 안 돼서 Awake에서 바로 꺼주는 코드를 추가 시켜줬다. // 과연 나는 시간이 지나고 봤을 때 이게 뭔 소리인지 알까.
끝까지 일단 가봐야 하는데 일단 마무리..
이후에 기초적인 UI와 Sound, 등을 추가 하고 마무리 하게 되었다.
이것들은 매우 기초적인 방식으로 구현 했는데 아쉽다.
이렇게까지만 하고 과제를 제출 했다. 완성도보다는 제출시간 지키기..,
자동차 빵빵 거리는 거 넣고 싶었는데, 코인 먹으면 +100 올라오는 거랑... 나 뒷심이 약한가?...,,,
나중에 캠프가 끝나면 했던 과제들이랑 안 했던 과제들 싹 다 해봐야겠다.
'게임 개발기록' 카테고리의 다른 글
스파르타 심화 팀과제 / 클릭형게임 펫 시스템 만들기 (0) 2024.06.23 스파르타 심화주차 팀과제 / 계속 나오는 보스 만들기 (0) 2024.06.19 게임개발 숙련주차 팀과제 / Quaternion을 사용해서 문 열리게 하기 / 스파르타부트캠프 (0) 2024.06.12 게임개발 숙련주차 팀과제/아이템 미리보기 화면 만들기/스파르타 부트캠프 (0) 2024.06.12 스파르타 3D 숙련주차 개인과제 (0) 2024.06.12