so๋ก ์ธ๋ฒคํ ๋ฆฌ ๋ง๋ค๋ฉด ๋๊ฒ ์งํ๊ณ ๋ง๋ค๊ณ ย ๋๊ฐ๋ฆฌ ๊นจ์ก๋ค๊ฐย ๋ดํฉํ๋ ์ฐ ํ
๊ทธ๋ฆฌ๊ณ ์ฌ์ค ๊ฐ๋ฐ์ผ์ง๋ผ๊ณ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ง ๋ณด์ด๋ ์๋๊ฐ๋ ์คํ์ค ์ฐ๊ตฌ์์ ๋น๋์ค๋ก ์ฐ์ ์ผ์ง๋ณด๋ค๋,ย
์ด๋ฏธ ๋ฐฑ๊ณจ์ด ๋ ์ด๋ค ๋ชจํ๊ฐ์ ๋น๋ง๋ก๊ฐ์ ์ผ์ง๋ ์ข์ ๊ฒ ๊ฐ์์ ๋ง๋จธ๋ฆฌ ์ผ์ง๋ก ํจ.
ํ์ ์ ์๊ฑฐ๋ ์ด๋ฏธ ๊ฐ๋ฐ์ ์ํ๋ ์ฌ๋๋ค์๊ฒ๋ ๋ญ ๋น์ฐํ ์๋ฆฌ๋ฅผ ํ๋ค๊ณ ๋ณด์ด๊ฑฐ๋,ย
์์ง๋ ์ ๋ ๊ฒ ํ์ฌํ ๋ฐฉ๋ฒ์ ์ฐ๊ณ ์๋์ฒ๋ผ ๋ณด์ด๊ฒ ์ง๋ง, ์๋ฌดํผ ๋๋ ์ธ๋ฒคํ ๋ฆฌ๋ ์ ์ฅ๋ถ๋ฌ์ค๊ธฐ ํํ ๋ฆฌ์ผ์ ๋ช๊ฐ ๋ณด๊ณ ์์ ์ ์ฌ์ ๋ถ์ํด๋ณด๊ณ ย
๋ช๋ฒ์ด๋ ์ฝ๋๋ก ์จ๋ณธ๋ค์์์ผ ๊นจ๋ฌ์ ์ฌ์ค๋ค์ด๋ค.
๋์ฒ๋ผ ์ฌ์ค์ ๋ ธ๋ฒ ์ด์ค๋ก (์ฐ๊ตฌ์ค์์ ํ์ด์ฌ์ด๋ ๋ง์ง์๊ฑฐ๋ฆฌ๋๊ฑธ ๊ฐ๋ฐ์๋ผ๊ณ ์ฐฉ๊ฐํ ๋๋ ์ง๋ 2๋ ๋์ ์์ฃผ ๊ฐ๊ณ ์์ ํ๋ค.)ย
์์ํ์ฌ๋๋ค์ด ์ข ๋ณด์ด๋ ๊ฒ๊ฐ์ ์ฐ๋ ๊ธ์ด๊ธฐ๋ ํ๋ค.
ย
ย so๋ก "์ ์ฅ"๋์ด์ผ ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ฉด, ์ด๊ฒ ์๋ํฐ์์๋ ๋ฐ์ดํฐ๊ฐ ํ๋์ ๋ณด์ด๊ณ ย
Vector3 position๊ฐ๊ฐ์๊ฑฐ ์ ์ฅํ ๋, ๋ณํ์ํด์ฃผ๊ณ ํด์ย ๊ฐ๊ฟ์ด๋ค๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
๊ทธ๋ฌ๋ so๋ ๋ฐํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ฉ๋๊ฐ ์๋๊ณ , ๋ฏธ๋ฆฌ ์ ๋ ฅํด๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์์์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํจ.
๊ณต์๋ฌธ์๋ฅผ ์ ์ฝ๊ณ ๋ช ํํ๊ฒ ์๋์๋ฆฌ๋ฅผ ํ์ ํด์, ์ด๊ฒ ๋ฐํ์ ๋์ค ๊ฐ์ด ์์ ๋๊ณ , ์๋ํฐ์์ ์์ ํ ๋๋ง ๋ญ ๊ฐ์ด ๋ฐ์๋๊ณ ์ด์ฉ๊ตฌ ์ ์ฉ๊ตฌ ํ์ง๋ง
์๋ฌด๋ฆฌ ํ์ ํ๋ค๊ณ ํ๋ค ๋นก๋๊ฐ๋ฆฌ์ธย ๋๋ ์ธ์ ๊ฐ ๊ผญ ์ค์๋ฅผ ํด์ ์๊ฐ๋ญ๋น๋ฅผ ํ๋์ ์ด ํ๋๋ฒ์ด ์๋.
์๋ฆฌํ ๋ ๊ตญ๊ฐ์ฅ, ์์กฐ๊ฐ์ฅ, ์๊ฐ์ฅ ๋ค ๊ฐ์ ๊ฐ์ฅ์ด๋ผ๊ณ ์๋ฌด๊ฑฐ๋ ์ฐ๋ฉด ๋ง ๋ณ์ ๋๋๊ฑฐ๋ ๋น์ทํ๋ค ์๊ฐํจ.
so๋ก ๋ญ ๋ชปํ ๊ฑด ์์ด๋ณด์ด๋๋ฐ, ๊ตณ์ด ์ข์ ์๋ฃจ์ ์ด ์๋๋ฐ ๋ค๋ฅธ์ฉ๋๋ก ๋ง๋ค์ด์ง ํด๋์ค์๋ค๊ฐ ๋ด๊ฐ ์ํ๋ ๊ธฐ๋ฅ ๋ฃ๊ฒ ๋ค๊ณ ์ถ๊ฐ ์ฝ๋ ์์ฑํ๋๊ฒ์
๋งค์ฐ ๋น์์ฐ์ ์ด๋ผ๊ณ ํ๋จํจ.
๊ฒฐ๊ตญ json์ผ๋ก ์ ์ฅํ๊ธฐ๋ก ๋ง๋จน๊ณ json์ ๊ทธ๋ฅ ์ ์ฅํ๋ ๋ฐฉ์์ ์ผ์๋๋ฐ, ์ฌ์ค ๋ ๊ทธ๋ฅ savedata.json ์ด๋ ๊ฒ ์ ์ฅํด๋๋ฉด ๋ญ๊ฐ ์ฐ์ฐํ๊ธฐ๋ ํ์ง๋ง์๋
db๋ก์์ ๊ด๋ฆฌ๊ฐ ์ข ์ด๋ ค์ด ๊ฒ ๊ฐ์์ db๋ฅผ ์ฌ์ฉํด๋ณด์ ๋ง๋จน์.
json์ด๋ฉด nosql์ ์ฌ์ฉํด์ผํ ๊ฒ ๊ฐ์์, mongodb์ชฝ ์ฐพ์๋ณด๋ realm์ด๋ผ๊ณ ์๊ธธ๋ ์ง๊ธ์ ๊ทธ๊ฑฐ ์ฌ์ฉ์ค.
realm studio๋ผ๊ณ db๋ทฐ์ด(?) ๋ ๋ถํธํ์ง๋ง ์๊ณ , ์ ๋ํฐ ํ๋ฌ๊ทธ์ธ๋ ์์ด์ ์ฌ์ฉํ๊ธฐ ํธํ๊ธธ๋ ์ผ๋จ ์ฌ์ฉ์ค.
์ด๊ฑฐ ์ฐ๋ฉด์ ์์ง ๋๊ฐ๋ฆฌ๋ ์๊นจ์ก๋๋ฐ, ๋๊ฐ๋ฆฌ ๊นจ์ก๋ ์ฌ๋์์ผ๋ฉด ๋๊ธ๋ก ๊ฒฝ๊ณ ๋ถํํจ.
realm์ ์ฝ๋๋ฅผ ์ง๋ฉด์ json์ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๋๊ฒ์ ์๋
IRealmObject, IEmbededObjectย ๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์์ํ partial class๋ฅผ ์์ฑํด์ db model์ ์ ์ํด์ค.
์๋ฅผ๋ค์ด ์ด๋ฐ์์.
public partial class GameRealmModel : IRealmObject
ย ย {
ย ย ย ย [PrimaryKey][MapTo("_id")]
ย ย ย ย public ObjectId Id { get; set; } = ObjectId.GenerateNewId();
ย ย ย ย public DateTimeOffset CreatedTime { get; set; }
ย ย ย ย public DateTimeOffset ModifiedTime { get; set; }
ย ย ย ย ย
ย ย ย ย public TransformRealmModel LastPosition { get; set; }
ย ย }
๊ฐ๋จํ๊ฒ ๊ฒ์๋ฐ์ดํฐ ์ฒซ ์์ฑ์๊ฐ, ์ต๊ทผ์ ์ฅ์๊ฐ, ๋ง์ง๋ง ์์น๋ฅผ ์ ์ฅํด์ค.
์ ์ฅํ๋๊ฒ์ ๊ฐ๋จํจ.
// ์ฒ์์์ฑ
ย await _realmInstance.WriteAsync(() =>
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย _realmInstance.Add(new GameRealmModel()
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย CreatedTime = DateTimeOffset.UtcNow,
ย ย ย ย ย ย ย ย ย ย ModifiedTime = DateTimeOffset.UtcNow,
ย ย ย ย ย ย ย ย ย ย LastPosition = new TransformRealmModel(Vector3.zero, 0)
ย ย ย ย ย ย ย ย });
ย ย ย ย ย ย });
// ๋ถ๋ฌ์ค๊ธฐ
var data = _realmInstance.Find<GameRealmModel>(new ObjectId(id));
// ์์ ํ๊ธฐ
ย await _realmInstance.WriteAsync(() =>
{
data.LastPositionย = new TransformRealmModel(new Vector3(100, 0, 100), 90);
});
๋น์ฐํ๋ ์ ๋ํฐ์ Transform์ด๋ Vector3, Quarternion๊ฐ์๊ฑธ ๋ฐ๋ก ์ ์ฅํ ์๋ ์์.
๊ทธ๋์ ์ ๋ํฐ์ Transform์ ๋์ํ ์ ์๋ย TransformRealmModel๋ผ๊ณ ๋ฐ๋ก ๋ง๋ค์ด์ค.
๋ฐ๋ก๋ฐ๋ก ๋ณํํด์ ์ธ ์ ์๋๋ก ํ๋กํผํฐ๋ ์์ฑ์๋ ๋ง๋ค์ด๋์๋ค.
์๋ฌดํผ, ์ด๋ ๊ฒ ํ์ํ ํด๋์ค๋ค์ ์ ๋ง๋ค์ด๋๊ณ ๋๋ฉด
var data = _realmInstance.Find<GameRealmModel>(new ObjectId(id));
์ด๋ ๊ฒ ๋๋น์์ ๋ถ๋ฌ์ค๊ณ ๋๋ฉด, ๊ฒ์ ๋ฐํ์์์ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ๋ณํํด์ฃผ๋ ํจ์๋ฅผ ๋ง๋ ๋ค.
์๋ ์ฝ๋๋ ๊ทธ๋ฅ ์์ ์ฒ๋ผ ๊ฐ๋จํ๊ฒ ๋ง๋ ์ฝ๋๋ผ์,ย
player gameObject์ transform์ ์ฐธ์กฐํด์ค๋ ๊ณผ์ ๋ค์ด ์์ด์ผ ํ์ง๋ง ์๋ตํ๋ค.
์ ๋ํฐ ์คํฌ๋ฆฝํธ์์ ์ธ์คํด์ฑ์ด ์๋๋ transform์ ์ฌ๊ธฐ์ new Transform ํ๋ ๊ฒ์ ์ด์ํ๊ฒ ๊ฐ์
๊ทธ๋ฅ ์ธ๊ฒ์๋ชจ๋ธ ํด๋์ค์ Vector3๋ Quaternion์ผ๋ก ๋์ฒดํ๋ค.ย
๋ฐํ์์ฉ ํด๋์ค๋ ์์c#์ ์ฌ์ฉํ๋ค. (์ฌ๊ธฐ์ ์์c#์ ๊ทธ๋ฅ ์ ๋ํฐํด๋์ค๋ฅผ ์์์ํ๊ฒ์ ์๋ฏธํ๋ค.)
public class IngameModel
ย ย ย ย {
ย ย ย ย ย ย public Vector3 Position;
ย ย ย ย ย ย public Quaternion Rotation;
ย ย ย ย ย ย public DateTime CreatedTime;
ย ย ย ย ย ย public DateTime ModifiedTime;
ย ย ย ย }
ย ย ย ย ย
ย ย ย ย public static async UniTask<IngameModel> Convert(GameRealmModel realmModel)
ย ย ย ย {
ย ย ย ย ย ย var result = new IngameModel
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย Position = realmModel.LastPosition.Position,
ย ย ย ย ย ย ย ย Rotation = realmModel.LastPosition.Rotation,
ย ย ย ย ย ย ย ย CreatedTime = realmModel.CreatedTime.DateTime,
ย ย ย ย ย ย ย ย ModifiedTime = realmModel.ModifiedTime.DateTime
ย ย ย ย ย ย };
ย ย ย ย ย ย return result;
ย ย ย ย }
์๋ฌดํผ ์ฃผ์ ์์ง๋
์ธ์ด๋ธ ์์คํ ์ค๊ณ์ ์์ด์ย
๋๋น์ฉ ํด๋์ค์, ๋ฐํ์์ฉ ํด๋์ค๊ฐ ๋ฐ๋ก ์์ผ๋ฉด ํธ๋ฆฌํ๊ณ , ๊ทธ ๋์ ์ค๊ฐํด์ฃผ๋ ์๋จ์ด ์ ์ ํ๊ฒ ์์ผ๋ฉด ๋งค์ฐ ํธ๋ฆฌํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ํ ์คํธ ๊ณผ์ ์์ db์ ๋ฐ์ดํฐ๋ ์กฐ์ํ๊ธฐ๊ฐ so์ ๋นํด ์๋์ ์ผ๋ก ๋ถํธํ๊ธฐ ๋๋ฌธ์ ํ ์คํธ์ฉ ๋๋ฏธ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๋๋ฐ๋
์ญ์ so๊ฐ ์ต๊ณ ๋ผ๊ณ ์๊ฐํ๋ค. ๊ทธ๋์ so๋ก๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ๋๋ฏธ์ฉ soํ์ผ์ ๋ง๋ค์ด์ฃผ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ so ํด๋์ค๋ฅผ ๋ฐํ์์ฉ ํด๋์ค๋ก ๋ณํํด์ฃผ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ค๋ค.
๋ฐํ์ ๋ฐ์ดํฐ๋ฅผ so๋ก ๋ณํํ ํ์๋ ์์ผ๋, ๋จ๋ฐฉํฅ์ผ๋ก๋ง ๋ณํํด์ฃผ๋ ํจ์๋ฅผ ๋ง๋ค๋ฉด ๋๋ ๊ฐ๋จํ๋ค.
๊ทผ๋ฐ ๊ทธ๋ด๊ฑฐ๋ฉด ๊ตณ์ด soํด๋์ค๋ ๋ฐํ์ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ ํ์๊ฐ ์๋๊ฐ๋ผ๊ณ ํ๋ฉด,
so๋ ์คํฌ๋ฆฝํธ์์ ์ธ์คํด์ฑํ ๋, ๊ทธ๋ฅ new๋ก ์ธ์คํด์ฑ ํ๋ฉด ๋ญ๊ฐ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ so๋ฅผ ์ด์ฉํด์ ๋ฐํ์ํด๋์ค๋ฅผ ์์ฑํ๋๊ฒ์ ์ ๋ํฐ ์๋ํฐ์์ ๋๋ ํ ์คํธ๋จ๊ณ์ ๋น๋์์๋ง ์ฌ์ฉํ ๊ฒ์ธ๋ฐย
์ด๋ฐ๊ฒ์ ์์ ๋ถ๋ฆฌ๋ฅผ ํ๋๊ฒ ๋ง๋ค๊ณ ์๊ฐํ๋ค.
์์ฝํ์๋ฉด ๋ค์์ 3๊ฐ์ง ๋ ์ด์ด(?)๊ฐ ์๊ณ , ํ์ดํ๋ฐฉํฅ์ผ๋ก๋ง ๋ณํ๋๋ ํจ์๊ฐ ์์ ๋.
realm layer <->ย runtime layer <-ย so layer
์์ด๊ณ ์ด ๊ฐ๋จํ๊ฑธ ์ค๋ซ๋์ ํค๋งธ๋ค.
๋ค๋ฅธ ์ด๋ณด ์ธ๋ถ์ด๋ค์ ์ฝ์งํ์ง ๋ง๋๋ก.
ํํด ๋ฐ ์ธ์ ๊ณต๊ฒฉ๊ธ ์กฐ์ธย ๋งค์ฐํ์.
์จ๋๊ณ ๋ณด๋ json์ผ๋ก ์ ํํ๋ ค๋ ํ์ธ์ ํํ ์ฐ์ด ๋ง์๋ฏ
ํด๋ผ์ด์ธํธ๋จ์์ DB์ปค๋ฅํฐ๋ฅผ ์ง์ ๋ฌ์์ ๋ฆฌ๋ชจํธ ํ๊ฒฝ์ ์๋ DB๋ฅผ ์ง์ ์กฐ์ํ๋๊ฑด ์ข์ง ์์. ์ค๋ฐฐํฌ์์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋๊ฐ ๊ถํ ๊ด๋ฆฌ๋ฅผ ์ํด์ฃผ์ .
๋ด๊ฐ ์๋ชป๋ดค๋ค MongoDB ์ธ์คํด์ค ๋์๋๊ณ ์ฐ๋๊ฑด์ค ๊ตณ๊ตณ
์.. ๊ทธ๋ฅ ํด๋ผ์ด์ธํธ์์ ๊ทธ๋ฅ _realmInstance = Realm.GetInstance(configuration); ์๋ ๊ฒ ํด์ ์ฐ๊ณ ์๋๋ฐ.. ์ด๊ฒ ํด๋ผ์ด์ธํธ์์ ๊ทธ๋ฅ ์ธ์คํด์ค ๋์๋๊ณ ํ๋๊ฑฐ ๋ง์ง? ๋ก๋ํจ์ ์ธ์ด๋ธํจ์๋ ๊ทธ๋ฅ ํผ๋ธ๋ฆญ์ธ๋ฐ.
var referencePath = Application.persistentDataPath + "savedata"; ์ด๋ ๊ฒ ๊ฒฝ๋ก ์ง์ ํด์ ๊ทธ๋ฅ ์ฌ๊ธฐ์ ์ ์ฅ๋๋๋ฐ ์ด๊ฒ ๋ฆฌ๋ชจํธํ๊ฒฝ์ ์๋๊ฑฐ์ง?
ใ ใ realm์ผ๋ก ๋ก์ปฌํ๊ฒฝ ๊ตฌ์ฑํ๊ฑฐ ๋ง์.
ํ ๊ฐ์ถ