생각보다 많은 기능을 구현하지는 못했지만 팀 프로젝트가 끝났다.
역시나 다른 분들과 병합하면서 Script에서 문제가 생기는 부분들이 꽤 있었던 것 같다.
그래도 문제를 해결하는데에 그렇게 오랜 시간이 걸리지 않아서 별 문제는 없었다.
이번 프로젝트를 진행하면서 Update문과 FixedUpdate문의 호출 빈도? 정도를 체감할 수 있었던 것 같다.
아직 최적화를 어떻게 하는지는 잘 모르겠지만 최대한 Update 문을 사용하는걸 지양할 필요가 있을 것 같다.
추가로 중간에 기존에 Object Pool로 Car Object를 생성하고, 붙어있는 Vehicle Script에 Coroutine을 사용해서 충돌 될 때 SetActive(false)로 바꿔주고 일정 시간이 지난 후에 Reset 해야 될 변수들을 ResetCar 함수에 묶어둬서 ResetCar 함수를 실행함과 동시에 SetActive(true)로 변경을 해줬었는데 이렇게 되다보니 기존에 충돌되서 남아있는 Car의 위치가 다른 Car의 Spawn 위치와 동일하면 생성되자마자 충돌이 일어나는 현상이 생겨서 Coroutine을 2개 추가하려고 했다.
그런데 생각해보니 Object가 SetActive(false)가 된 상태에서는 Coroutine을 실행할 수가 없어서 기존에 벽돌깨기 게임을 만들었을 때 사용했었던 방법으로 해결했다.
EmptyObject(편의상 a라고 칭함)를 만든 후 새로운 Script(편의상 b라고 칭함)를 생성해서 넣어준다. 그리고 ObjectPool을 수행하는 Script에 Public으로 b Class의 변수인 bClass를 생성하고, Awake에서 a.GetComponent<b>();를 통해서 a Object에 있는 b Script의 Class를 받아온다.
그리고 Car Object에 붙어있는 Vehicle Script에서 b Class 변수를 생성해주고 변수에 b Class를 넣기 위해서 함수를 하나 만든다.
public void Setb(b class)
{
b = class;
}
마지막으로 ObjectPool에서 Car Object들을 생성할 때 car.GetComponent<Vehicle>().Setb(bClass) 각 Car Object에 있는 b Class 변수를 ObjectPool에 있는 a Object에서 받아온 b Class로 넣어준다.
이렇게하면 Vehicle에서 a 오브젝트에 붙어있는 b Class를 사용할 수 있다.
그래서 Car Object가 SetActive(false)가 되고, 코루틴이 실행된 뒤, b Class에 있는 함수를 실행시켜서 코루틴이 실행된 뒤 Reset 되는 식으로 변경했다.
다른 분들이 만드신 기능을 보고 들으면서 많은 것을 배울 수 있었고, 생각보다 신기한 기능이 많았다.
또 생각했던 것보다는 간단하게 재밌는 게임을 만들 수 있어서 좋았다.
'내배켐 Unity TIL' 카테고리의 다른 글
Unity 51일차 TIL - 팀 프로젝트 트러블 슈팅 (0) | 2024.06.24 |
---|---|
Unity 47일차 TIL - Unity InputSystem (0) | 2024.06.18 |
Unity 36일차 TIL - 팀 프로젝트 1 (Unity MiniMap) (1) | 2024.06.03 |
Unity 29일차 TIL - Unity 팀 프로젝트 6 마무리 (0) | 2024.05.24 |
Unity 28일차 TIL - Unity 팀 프로젝트 5 (RigidBody Material(Bounce)) (0) | 2024.05.24 |