편집 : 더 자세히 설명되었습니다.Unity Inspector에서 모든 유형 가져 오기
나는 나의 게임을위한 SaveManager 시스템을 개발하고있다. 기본적으로해야 할 일은 다음과 같습니다.
1) 관리자로 끌어 & 드롭하여 "ANY"사용자 생성 직렬화 클래스를 가져옵니다. (데이터를 저장).
2) 경우 BinaryFormatter 또는 XmlSerializer를 중 하나를 사용하여 파일에 해당 클래스를 씁니다.
나는 내 미래 게임에서 사용할 수 있어야합니다. 따라서 데이터 클래스 (유형)를 독립적으로 저장해야합니다 (예 : 직렬 자). 자산처럼 사용하고, SaveManager를 가져오고, 매개 변수로 직렬화 된 클래스를 제공하고, 나머지는 그렇게 할 것입니다. 하지만 내가 말한대로 모든 사용자가 직렬화 된 클래스를 사용할 수 있어야합니다.
"직렬화 된 클래스"는 SaveManager 프로젝트가 아닌 "게임 프로젝트"에서 사용자가 작성하므로 SaveManager에 해당 "직렬화 된"클래스 유형이 없습니다. 프로젝트, 나는 SaveManager를 만드는 법을 모르며, inspector에서 클래스를 참조한다.
그래서 내가 게임 프로젝트 (안 SaveManager 프로젝트에서) 난 내 "게임"프로젝트에 SaveManager 프로젝트 (자산)을 가져올 때 이제 내가 할 수
[System.Serializable]
public class SaveData
{
public string Name = "Name";
public int Number = 5;
}
을해야이 클래스를 생성 말할 수 스크립트를 SaveManager 속성에 드래그 앤 드롭하고 나머지는 그대로 둡니다. BinaryFormatter는 모든 Serializable 형식에서 작동하기 때문에 실제로 형식의 이름은 중요하지 않습니다. BinaryFormatter는 유형이 직렬화 가능한 한 유형이 없음을 의미합니다. 그 기능을 사용하고 SaveManager 형식을 무료로 만들려고합니다.
그래서 미래에 "MyNewSaveData"라는 클래스를 "다른 게임에서"사용하고 싶다면 이것을 SaveManager 관리자로 드래그 앤 드롭하여 나머지 작업을 수행 할 수 있기를 원합니다. 내가 SaveManager 스크립트에서
public object _SaveData;
를 사용하는 경우
지금은 일이있다, 단결 관리자는 표시되지 않습니다. 내가
public Object _SaveData
를 사용하는 경우
그것은 객체로 유형을 만든 사용자 캐스트, 그리고 내가 필요로하는 유형을 잃게됩니다.
나는 System.Type을 사용했지만, 단결도를 표시하지 않습니다.Basicly는 내가하고 싶은, 참고로 "모든"직렬화 클래스를 돌려줍니다. 마찬가지로
public SerializedClass _SaveData;
또는 무언가 참조 "어떤"직렬화 클래스를 수용해야한다는
public Script _SaveData;
있다. 형식이되면 그 형식으로 변환합니다. 내가 _SaveData.GetType()를 사용하는 경우 내가
public Object _SaveData
를 사용하는 경우
, 나는 "사용자가 만든"유형을 얻을. 내 손에 형식이 있지만 Object를 그 형식으로 변환 할 수 없습니다. 캐스팅 할 때 그 유형을 사용하는 방법을 모르겠습니다.
내가 한 일은 인스펙터에 표시되지 않거나 다른 유형으로 캐스팅되어 데이터가 손실됩니다.
어떻게해야합니까?
사이드 노트 : 유니티 (의존성 삽입 프레임 워크)가 아니라 Unity3d (게임 프레임 워크)에 대해 묻고 싶습니다. 사실이라면 반드시 태그를 업데이트하십시오. –
'public Object _SaveData'를 사용하고'_SaveData.GetType()'을 호출하면 출력은 무엇입니까? – Ideae
@ 아이디 나는 내가 원하는 타입을 얻습니다. 하지만 캐스팅에 사용하는 방법을 모르겠습니다. 나는 노력했다. 유형 type = _SaveData.GetType(); 여기 타입이 있습니다. 하지만 어떻게 사용합니까? 나는 (유형) _SaveData를 사용할 수 없다. 그런 용도는 없다. Unity 개체를 System 개체로 캐스팅 할 수 없으므로 Convert.ChangeType (object, type)도 작동하지 않습니다. 그래서 여기에 저는 제 손에있는 타입을 가지고 있지만 그것을 사용할 방법이 없습니다. – BerkayDrsn