안녕하세요 게임정보저장 관련 문의 입니다.

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.11.5
  • 프로젝트명 :
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

현재 게임을 제작중인데, ScriptableObject로 아이템을 제작중입니다. 현재 Item이라는 클래스의 ScriptableObject 타입 부모 클래스가 있고, 그 밑 자식 스크립트로 각각 스탯을 가진 아이템 클래스들이 있는데 이것을 Param으로 변환을 한다면 각 아이템의 스탯을 가진 채로 변환이 될까요 아니면, Item클래스에 있는 것만 저장이 되는 건가요?

예시 코드입니다

public class Item : ScriptableObject
{
   public string itemName;
}
public class Weapon : Item
{
    public float Attackdmg;
}
public class Ring : Item
{
    public float hp;
} 

안녕하세요 개발자님,
문의하신 내용에 대해 답변드리고자 하였으나,
정확히 어떤 내용을 문의하시고자 하는지 확인에 어려움이 있습니다.

이것을 Param으로 변환을 한다면 각 아이템의 스탯을 가진 채로 변환이 될까요 아니면, Item클래스에 있는 것만 저장이 되는 건가요?

문의내용 과 관련하여 조금 더 자세한 설명을 남겨주신다면 확인하여 안내드릴 수 있도록 하겠습니다.

게임정보를 저장할때, 이런식으로 코드를 제작하게 되는 걸로 알고 있습니다

publci Param ToParam()
{
    Param param = new Param();
    param.add("item", temp);
}

이렇게 된다면 제가 예시로 보내드린 코드로

public class Item : ScriptableObject
{
   public string itemName = "text";
}
public class Weapon : Item
{
    public float Attackdmg = 0;
}
public class Ring : Item
{
    public float hp= 0;
} 

//여기서 부터는 다른 코드
public class SaveClass : MonoBehaviour
{
    public List<Item> _items; //여기에는 이미 아이템이 들어가있음 Ring클래스와 Weapon클래스 각 한개씩(기본 클래스의 내용 변경x)
    
   public void SaveData(){
        Param param = new Param();
        param.add("items", _items);
        Backend.GameData.Insert("Inventory", param);
    }
}

이런식으로 보냈을때 데이터들이 어떻게 보내지는지 궁금합니다.

안녕하세요, 개발자님.
param에 클래스를 직접 넣을 수는 없기 때문에,
예시코드에서는 데이터 타입의 문제로 삽입이 이루어 지지 않을 것으로 보입니다.
GameData.Insert 시 클래스를 담은 리스트가 아닌 클래스의 값을 담은 리스트를 넣어줘야 합니다.
또한, 리스트로 한 번에 담을 시에는 데이터 타입이 같아야 하고,
다를 경우 컬럼을 추가하는 식으로 분리해서 넣어야 하는 점 참고 부탁드립니다.

클래스의 값을 담은 리스트라는게 무슨 이야기인가요? 그리고 부모클래스인 Item으로 한번에 다 담을 수 있습니다.

안녕하세요, 개발자님.
이 전 답변이 잘못되어 정정 안내드립니다.
ScriptableObject의 경우 값이 참조 형식으로 들어가기 때문에,
이미 Param에 삽입을 완료한 값이더라도,
Insert 전에 ScriptableObject의 값이 수정될 경우 Param 안에 들어간 값도 같이 수정되게 됩니다.
잘못된 안내로 혼선을 드려 죄송합니다.

아뇨아뇨 그런 이야기가 아니라, 자식클래스를 부모클래스로 param을 통해 넣을 경우에도 자식 클래스 그대로 저장이 되는지 궁금해서 그렇습니다.

자식 클래스를 insert 하였을때

      public class Test1 {
            public string str1 = "str1";
            public string str2 = "str2";
        }

        public class Test2 : Test1 {
            public string str3 = "str3";
            public string str4 = "str4";
        }


        public void Insert()
        {
            Param param = new Param();
            param.Add("classType", new Test2());

            Backend.GameData.Insert("score", param);
        }

넣어진 값은 아래와 같습니다.

{
    "serverTime": "2024-02-28T02:09:36.019Z",
    "rows": [
        {
            "client_date": {
                "S": "2024-02-28T02:09:34.838Z"
            },
            "classType": {
                "M": {
                    "str3": {
                        "S": "str3"
                    },
                    "str4": {
                        "S": "str4"
                    },
                    "str1": {
                        "S": "str1"
                    },
                    "str2": {
                        "S": "str2"
                    }
                }
            },
            "inDate": {
                "S": "2024-02-28T02:09:35.967Z"
            },
            "updatedAt": {
                "S": "2024-02-28T02:09:35.967Z"
            },
            "owner_inDate": {
                "S": "2024-02-27T06:12:07.971Z"
            }
        }
    ],
    "firstKey": null
}

감사합니다. 드디어 답변을 받았네요…! 인벤토리를 제작을 하려했는데, 아직 구상단계라 인벤토리 클래스의 저장방식을 고민중이였습니다. 감사합니다.

좋아요 1