Unity_2기 내일배움캠프 TIL

Unity_2기 11주차 (230119)

잼잼재미 2024. 1. 19. 10:53

오늘도 어제와 마찬가지로 구현했던 기능의 버그 수정 및 개선, 추가 기능을 구현했다.

 

 

개선 내용


1. 적과 동료의 Target에 대한 거리 계산

 private void Update()
{
    if (_targets.Length == 0) Distance = -1;
    else Distance = (Target.transform.position - transform.position).magnitude;
}

 

기존에는 일정 범위 내, Target이 존재한다면 magntiude 함수를 사용해서 실제 거리를 매 프레임 계산했다. 

 

 

 private void Update()
{
    if (_targets.Length == 0) Distance = -1;
    else Distance = (Target.transform.position - transform.position).sqrMagnitude;
}

 

하지만 정확한 거리의 계산이 필요한 것이 아닌 각 State를 전환하기 위한 거리의 비교 목적으로 사용되기 때문에 sqrMagnitude를 사용했다. 실제로 magnitude를 매 프레임 호출하게 되면 성능에 좋지않다는 것을 구글링을 통해 알게되었다. sqrMagnitude는 magnitude에서 제곱근의 연산을 하지 않는데, 이 제곱근의 연산을 많이 사용하게되면 성능이 저하된다.

 

 

 

실제로 거리값들을 제곱의 값으로 수정했다.

 

 

2. ObjectPool

 

 

기존에 총알 충돌 프리팹은 Instantiate로 생성하고 Destroy 했다. 유니티에서 Instantiate와 Destroy 많이 사용하게 되면 성능 저하가 생길 수도 있기 때문에 강의에서 들었던 ObjectPool을 활용했다. 우리가 만드는 게임 프로젝트는 적과 동료간의 단체 전투가 있기 때문에 ObjectPool이 필수적이라고 생각했다.

 

https://kkln2486.tistory.com/167

 

Object Pool

Object Pool 오브젝트를 미리 생성하고 삭제하지 않고, 재사용 해서 최적화하는 방법 프리팹의 Instantiate, Destroy 함수는 비용이 큼 총알과 같이 자주 생성되고 삭제되는 프리팹에 사용 총알 Effect Objec

kkln2486.tistory.com

 

 

회고


오늘은 전체적으로 게임 리팩토리 과정을 진행했던 것 같다. 게임을 개발할 때, 최적화 부분은 항상 조심해야 한다. 생각보다 Distance 함수가 자주 사용되면 치명적이라는 것을 알게되었고, 오브젝트 풀의 경우 강의에서 들었지만 어려워서 정리를 잘 못했는데 이번 기회에 확실히 정리했기 때문에 앞으로도 사용할 수 있을 것 같다.

'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글

Unity_2기 12주차 (230123)  (1) 2024.01.23
Unity_2기 12주차 (230122)  (0) 2024.01.22
Unity_2기 11주차 (230118)  (0) 2024.01.18
Unity_2기 11주차 (230117)  (0) 2024.01.17
Unity_2기 11주차 (230116)  (0) 2024.01.16