구조체를 typename 인자로 갖는 List에서 내부 구조체를 접근하려 할 때,
오류가 발생했다.
[Serializable]
public struct StageState
{
public bool isMapEntered;
public bool isPlayerDied;
public bool isCleared;
}
이런 맵의 정보를 가진 구조체가 있을 때,
[CreateAssetMenu(menuName = "StageInfo")]
public class StageInfo : ScriptableObject
{
public int curMap;
public List<StageState> mapStates= new List<StageState>();
}
이런식으로 scriptableobject로 관리 중이였다.
여기서 stageinfo.mapStates[0]. 이런식으로 mapStates내부 구조체에 접근하려 했다.
하지만 이런식으로 오류가 발생하였고, 무슨 의미인지 모르겠어서 검색했다.
찾아보니 클래스를 인자로 가지게 되면 인스턴스 주소를 참조하게 되어 리스트를 통해 클래스의 멤버 변수에 접근할 수 있다고 한다,
하지만 구조체 struct를 인자로 가지게 되면 구조체를 참조하는 게 아닌 값을 저장하게 되고,
값 형태이므로 복사본을 저장하게 된다.
여기서 읽기전용으로 값을 제공하게 되므로 구조체의 내부를 수정할 수가 없다.
따라서 새 구조체를 만들어줘서 새로 할당해줘야한다.
StageState tmpMapState;
tmpMapState.isMapEntered = true;
tmpMapState.isCleared = false;
tmpMapState.isPlayerDied = false;
stageInfo.mapStates[curMap] = tmpMapState;
이런식으로 넣어줬다.