[Unity] 구조체를 typename 인자로 갖는 List

jh Seo·2024년 10월 2일
0

유니티

목록 보기
50/50

개요

구조체를 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;

이런식으로 넣어줬다.

profile
코딩 창고!

0개의 댓글