내일배움캠프_Unity_6기/TIL(Today I Learend)

TIL : 2024-11-12(화) :: 트러블 슈팅 - 데이터 변경하여 사용시에 Class에서 분리해서 사용하자

BirdHead 2024. 11. 12. 22:03

[문제점]
Enemy Idle Class에서 Enemy 의 변수인 Data(EnemyData 스크립타블오브젝트)에 Collider변수를 저장한뒤
Enemy Chase Class에서 SO를 호출하니 null이 반환되는 건

 

[첫번쨰 대처]

1. Collider -> GameObject로 타입으로 수정한뒤  Collider의 정보가 필요할때 TryGetComponet를 이용해서 호출하였지만 되지 않았음 

 

해당 대처를 한 이유 : 

ScriptableObject에서 Collider와 같은 Unity 컴포넌트 타입은 일반적인 값이나 데이터처럼 직접 저장하거나 유지할 수 없습니다.  ScriptableObject는 주로 데이터만 저장하기 위한 용도로 설계목적이기 때문

 

디버깅중 찾은 원인은 Enemy가 하나만 있는경우 상관이 없지만
Enemy가 여러명이 되면서 해당 Data에 접근해서 계속 Data를 바꾸게 로직을 작성함

 

즉, ScriptableObject는 참조형식(Class) 이기에 A Class에서 사용중이다가 B Class값을 변경하게되면 A Class에서 사용하던 데이터가 사라지기 때문이였다. 

Class => 참조형식이다.

[해결방법]

Enemy Data(스크립타블오브젝트)에서는 Data 호출만하게 하고

Enemy의 Class로직을 담당하는곳에 따로 필요한 변수(Target)를 선언하여 사용하기로 함