スマホゲームを作ったよ

1d1580fb0945b0ffadff18e28bead3c5?s=47 いも
November 19, 2016

 スマホゲームを作ったよ

初めてリリースしたiOSアプリの紹介と、マルチシーンエディットの活用事例です

1d1580fb0945b0ffadff18e28bead3c5?s=128

いも

November 19, 2016
Tweet

Transcript

  1. ϚϧνγʔϯΤσΟοτ͸͍͍ͧ Ҫຊେొ(.01&1"#0JOD 6OJUZ'VLVPLB εϚϗήʔϜΛ࡞ͬͨΑ

  2. ΤϯδχΞ Ҫຊେొ  !BEBSBQBUB ϩϦϙοϓάϧʔϓ8&#։ൃνʔϜ

  3. ࠓ೔ͷ͓࿩ wJ04޲͚ήʔϜʮϦϏϯάσΠϒʯͷ঺հ wϚϧνγʔϯͷ׆༻ࣄྫ

  4. ϦϏϯάσΠϒ

  5. ϦϏϯάσΠϒ wσΠϒΛૢ࡞ͯ͠ձ͔ࣾΒୀۈ͢ΔΞΫγϣϯήʔϜ wୀۈ͢ΔͨΊʹࡾͭͷΩʔΞΠςϜΛೖख͍ͯ͘͠ wΩʔΞΠςϜΛೖखͯ͠ग़ޱʹ޲͔͑͹ΫϦΞʔ wࣾһʹั·Δͱઆಘ ߈ܸ ͞ΕͯμϝʔδΛड͚Δ wϓϨΠ͢Δͨͼʹ෦԰ͷߏ଄͕มԽ͢Δ wϓϨΠͷ࢓ํʹΑ༷ͬͯʑͳশ߸ΛऔಘͰ͖ɺୀۈྗ$ʙ4ͰධՁ͞ΕΔ w࣮ࡏ͢Δاۀͱͷؔ࿈͸Ұ੾͋Γ·ͤΜ

  6. σΠϒͷཪଆ w6OJUZ wϓϩάϥϚ̍ਓɺσβΠφ̍ਓɺҰϲ݄΄Ͳ w%Ϟσϧ͸શͯ4ZOUZ4UVEJPTͷΞηοτΛར༻ wεΫϦϓτܥΞηοτ͸6OJ3Yͱ"SCPSΛ࢖༻ wϒϥ΢ϯ؅ͬΆ͍දݱ͸ͷ͙ͨ͢͞ΜͷϒϩάهࣄΛࢀߟʹͨ͠

  7. Ξηοτ঺հ

  8. 6OJ3Y wIUUQTXXXBTTFUTUPSFVOJUZEDPNKQDPOUFOU w3FBDUJWF&YUFOTJPOTΛ6OJUZͰ࣮૷Ͱ͖ΔΑ͏ʹͳΔϥΠϒϥϦ wͱΓ͢ʔ΀͞ΜͷεϥΠυΛݟΑ͏ʂ wϦϏϯάσΠϒ͸ׂ̔6OJ3YͰॻ͍ͯΔ

  9. "SCPS wIUUQDBJUTJUIXBSFDPNXPSEQSFTT wέοτγʔ΢ΣΞ͞Μ࡞ͷΞηοτ wεςʔτϚγϯΛ؆୯ʹ࡞੒Ͱ͖ΔΤσΟλ֦ு w൚༻తͳػೳ͸ඪ४Ͱἧ͍ͬͯΔ ࣗ࡞εΫϦϓτͷ௥Ճ͕؆୯ w

  10. ࣮ࡍͷਧ͖ग़͠߈ܸͷ࣮૷

  11. Ϛϧνγʔϯͷ׆༻ࣄྫ 1.

  12. ୯ମγʔϯͰઃܭ͢Δ৔߹ Ұྫ wૉ๿ʹγʔϯΛ-PBE͢Δɻ̍γʔϯʹෳ਺ͷ1SFGBC͕͋Δ wήʔϜͷγεςϜͷΦϒδΣΫτ 1(͕Α͘৮Δ  wഎܠɺϑΟʔϧυͳͲͷΦϒδΣΫτ σβΠφ͕Α͘৮Δ  wγʔϯΛ͓ޓ͍ʹ৮Δͱਏ͍ͷͰɺखݩͰ࡞ͬͨ΋ͷΛ1SFGBCԽ

    w1SFGBCΛγʔϯʹೖΕ࣮ͯ૷׬ྃʂ େݩͷγʔϯʹɺΈΜͳ͕࡞ͬͨ1SFGBC͕௥Ճ͞Ε͍ͯ͘Πϝʔδ
  13. ͜ΕΛϚϧνγʔϯͰ୅ସͰ͖ͳ͍͔ʁ

  14. Ϛϧνγʔϯͷ׆༻ࣄྫJOϦϏϯάσΠϒ w(6*ͰͷϚϧνγʔϯΤσΟοτͷ׆༻ wεΫϦϓτͰͷ4DFOF.BOBHFSͷ׆༻

  15. Ϛϧνγʔϯͷ׆༻ࣄྫJOϦϏϯάσΠϒ w(6*ͰͷϚϧνγʔϯΤσΟοτͷ׆༻ wεΫϦϓτͰͷ4DFOF.BOBHFSͷ׆༻

  16. ෦԰ΛͲ͏࡞Δʁ Ұͭͷ෦԰ʹೖͬͯΔΦϒδΣΫτ w κϯϏ w นɾҜࢠͳͲݐ෺ͷ৘ใ w ϥΠτɺΧϝϥͳͲͷ৘ใ ͜ΕΒΛͲ͏؅ཧ͢Δʁ ·ͱΊͯ1SFGBCԽ͢Δͱ͍͏ख΋͋Δ͚Ͳɾɾ

  17. ڊେͳ1SFGBC͸ѻ͍ʹ͍͘ wࢠͷΦϒδΣΫτͷมߋΛͮ͠Β͍ wκϯϏͷҐஔมߋ౳͸සൟʹى͜Γ͏Δมߋ wγʔϯʹ࣋ͬͯߦͬͯ࿔ͬͯߋ৽ɾɾͱ͍͏खؒ wͦͷͨΊͷTBOECPYతγʔϯͷ༻ҙ w*OTUBOUJBUFͰগ͠ࢭ·ΔՄೳੑ 3FTPVSDFT-PBE"TZODͱ͍͏ํ๏͸͋Δ  wϨϕϧσβΠϯ࣌ʹ༏͘͠ͳ͍؅ཧํ๏ʹͳΔ

  18. γʔϯϑΝΠϧͰ؅ཧͨ͠ํ͕௚ײతͰ͸ʁ

  19. ϚϧνγʔϯΤσΟςΟϯάΛ࢖͏

  20. ϚϧνγʔϯΤσΟοτػೳ w͔Βೖͬͨػೳ wෳ਺ͷγʔϯΛಉ࣌ʹฤूͰ͖Δ wಈతʹγʔϯ୯ҐͰͷ௥Ճɾ࡟আ͕Մೳ w໾ׂͰγʔϯΛ෼ׂ͢Δ͜ͱͰɺͭΒ͍ίϯϑϦΫτΛ๷͛Δ

  21. εΫϦϓτͰͷγʔϯͷॏͶํ SceneManager.LoadScene(sceneName, LoadSceneMode.Additive); SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); ඇಉظͰ΋ಡΈࠐΊΔɻ ಡΈࠐΈ׬ྃɺ࡟আ׬ྃͷίʔϧόοΫ΋͋Δ SceneManager.sceneLoaded += (scene,

    mode) => {}; SceneManager.sceneUnLoaded += (scene) => {};
  22. ϦϏϯάσΠϒͷϝΠϯ෦෼͸̏ͭͷγʔϯΛॏͶ͍ͯΔ .BJO(BNF )VNBO$POUSPM6* 3PPN

  23. 3PPNγʔϯ w ෦԰Λߏ੒͢Δγʔϯ w γʔϯ௚ԼʹࢄΒ͔ͣ͞3PPUΛڬΉ w ݐ෺ɺκϯϏɺΧϝϥFUD w ෦԰ΛҠಈ͢Δ౓ʹಈతʹੜ੒ɺഁ غ͞ΕΔ

    w ͜͜ʹσΠϒͷ৘ใ͸Ұ੾ͳ͍
  24. )VNBO$POUSPM6*γʔϯ w ϓϨΠϠʔ σΠϒ ͕͍Δ w Ծ૝ίϯτϩʔϥ΋͜͜ w ୯ମͰ΋ಈ͔ͤΔ w

    3PPNͱ͜ͷγʔϯΛॏͶΔͱɺ෦ ԰୯ҐͰಈ࡞֬ೝͰ͖Δ w γʔϯ௥Ճ͚ͩͳͷͰσβΠφ୯ମ Ͱ࡞ۀ͠΍͍͢
  25. .BJO(BNFγʔϯ w ࣮ࡍͷήʔϜϑϩʔΛ؅ཧ͢Δ w ήʔϜͷΠϕϯτਐߦ؅ཧ w ෦԰ͷಈతಡΈࠐΈɺ੾Γସ͑ w #(.΋͜͜ w

    .BJO(BNF͕࠷ॳʹಡΈࠐ·Εɺॳ ظԽॲཧͰ)VNBO$POUSPM6*ɺ3PPN Λ௥Ճ͍ͯ͘͠ ը૾͕ͳ͍ͨΊՄѪ͍ೣΛ͓ૹΓ͍ͯ͠·͢
  26. ෼ׂ΍ͬͯΈͯͷॴײ w࡞ͬͨγʔϯΛͦͷ··࢖͑ΔͷͰ௚ײతʹ࿔Γ΍͍͢ wσβΠφ͕ಈ͖΍͍͢ɺ෼ۀ͕ḿΔ wಈ࡞֬ೝ࣌ʹεΫϦϓτΛ͍͡Δͷ΍Ίͯγʔϯ௥Ճ͚ͩͳͷָ͕ wڊେͳ1SFGBCΛ࡞Δ͘Β͍ͳΒ4DFOFʹͯ͠͠·ͬͨํ͕ѻ͍΍ͦ͢͏ wͨͩɺ(6*ͩͱγʔϯؒͰΦϒδΣΫτͷࢀরͰ͖ͳ͍ͷ͸஫ҙ

  27. Ϛϧνγʔϯͷ׆༻ࣄྫJOϦϏϯάσΠϒ w(6*ͰͷϚϧνγʔϯΤσΟοτͷ׆༻ wεΫϦϓτͰͷ4DFOF.BOBHFSͷ׆༻

  28. ϦϏϯάσΠϒ wσΠϒΛૢ࡞ͯ͠ձ͔ࣾΒୀۈ͢ΔΞΫγϣϯήʔϜ wୀۈ͢ΔͨΊʹࡾͭͷΩʔΞΠςϜΛೖख͍ͯ͘͠ wΩʔΞΠςϜΛೖखͯ͠ग़ޱʹ޲͔͑͹ΫϦΞʔ wࣾһʹั·Δͱઆಘ ߈ܸ ͞ΕͯμϝʔδΛड͚Δ wϓϨΠ͢Δͨͼʹ෦԰ͷߏ଄͕มԽ͢Δ wϓϨΠͷ࢓ํʹΑ༷ͬͯʑͳশ߸ΛऔಘͰ͖ɺୀۈྗ$ʙ4ͰධՁ͞ΕΔ w࣮ࡏ͢Δاۀͱͷؔ࿈͸Ұ੾͋Γ·ͤΜ

  29. ෦԰ͷࣗಈੜ੒

  30. ࣗಈੜ੒ͷͬ͘͟Γͱͨ͠࢓༷ w෦԰ 4DFOF ͕೚ҙͷ਺͚ͩϥϯμϜʹબ͹ΕΔ w෦԰ಉ࢜͸ɺຖճϥϯμϜʹυΞͰܨ͕͍ͬͯΔ wυΞΛௐ΂Δͱɺผͷ෦԰ʹ੾ΓସΘΔ wඞͣશ෦ͷ෦԰ʹೖΕΔΑ͏ʹɺ͍͍ײ͡ʹܨ͕͍ͬͯΔ ࢖༻͢Δ෦԰ͷબ୒ ෦԰ͷ੾Γସ͑ ࠓճ͸ҎԼͷೋ఺ʹ͍ͭͯ࿩͢

  31. ࢖༻͢Δ෦԰ͷબ୒ #"% wͱΓ͋͑ͣ෦԰γʔϯΛ೚ҙͷ਺ϥϯμϜʹϩʔυͯ͠Έͨ wϋʔυϞʔυͩͱ෦԰͘Β͍ϩʔυ͞ΕΔ w࣮ػ͕ͩΜͩΜͱԹ͔͘ͳΔ wJ1IPOFͰGQTͱ͍͏είΞΛୟ͖ग़͢ େྔͷγʔϯΛಡΈࠐΉͷ͸ݱ࣮తͰ͸ͳ͍ͷͰɺ γʔϯΛಡ·ͣʹ෦԰Λબ୒͢Δඞཁ͕͋Δ

  32. ෦԰৘ใͷ੾Γग़͠ 3PPN1SPQFSUZ w෦԰ͷ৘ใΛ4DSJQUBCMF0CKFDUʹ͢Δɻ w෦԰໊ɺ෦԰ͷछྨɺυΞͷ਺ɺΞΠςϜͳͲ wϑΝΠϧ໊γʔϯ໊ w3FTPVSDFT-PBE"MMͰ·ͱΊͯऔΕΔ w͋ͱ͸ϥϯμϜʹબ΂͹ྑ͍ var properties =

    Resources.LoadAll<RoomProperty>("Rooms").ToList();
  33. ͋Δఔ౓ϧʔϧ෇͚ͨϥϯμϜ w׬શͳϥϯμϜ͸σβΠϯ͕ݫ͍͠ w෦԰ʹଐੑΛ͚ͭΔ wඞਢͳ෦԰ɺඞਢͰͳ͍෦԰ w)VC &WFOUҎ֎͸̍ݸ͚ͩඞਢ w)VC͸̍ݸҎ্ w&WFOU͸̌ݸҎ্ public enum

    RoomType
 {
 Start, // ։࢝஍఺
 Locker, // ϩοΧʔϧʔϜ
 Timecard, // λΠϜΧʔυ෦԰
 President, // ࣾ௕ࣨ
 Exit, // ඇৗޱ
 Goal, // ΰʔϧ Hub, // ઀ଓ෦԰ (υΞ͸3ʙ4ͭ)
 Event // Πϕϯτ෦԰
 }

  34. ࢖༻͢Δ෦԰ͷબ୒ ؆ུԽͨ͠΋ͷ private List<RoomProperty> BuildRoomsProperties(int count) { // ෦԰ͷScriptableObjectΛશ෦औΔ var

    properties = Resources.LoadAll<RoomProperty>("Rooms").ToList(); // ඞཁͳ෦԰ଐੑΛఆٛ RoomType[] requiredRoomType = { RoomType.Start, RoomType.Locker, RoomType.Timecard, RoomType.President, RoomType.Exit, RoomType.Goal }; // ༨Γ͸HubଐੑͰຒΊΔ List<RoomType> hubs = Enumerable.Repeat(RoomType.Hub, count - requiredRoomType.Length).ToList(); // Α͠ͳʹϥϯμϜʹऔΓग़ͯ͠ฦ͢ return hubs.AddRange(requiredRoomType.ToList()) .Select(t => GetRandomRoomProperty(properties, t)) .ToList(); }
  35. ෦԰ͷ੾Γସ͑ɺͷલʹ෦԰ͷ৘ใΛ࣋ͭΫϥε w3PPN1SPQFSUZͰ෦԰৘ใ͸ఆٛͰ͖ͨ wࠓ౓͸ɺήʔϜಈ࡞தͷ৘ใ͕ඞཁʹͳΔ wͲ͜ͱܨ͕͍ͬͯΔʁͲͷΞΠςϜΛௐ΂ΒΕͨʁͳͲ w3PPN1SPQFSUZΛϕʔεʹΠϯελϯεΛ࡞ΔΠϝʔδ

  36. ෦԰ͱυΞͷΫϥεఆٛ #"% public class RoomBehaviour : MonoBehaviour { // ෦԰৘ใ

    public RoomProperty roomProperty; // ෦԰ʹ͋ΔυΞୡ public List<DoorBehaviour> doors; } public class DoorBehaviour : MonoBehaviour { // ܨ͕͍ͬͯΔυΞ public DoorBehaviour target; }
  37. ෦԰ͱυΞͷΫϥεఆٛ #"% w௚઀(BNF0CKFDUʹ઀ଓ৘ใΛ࣋ͨͤΔͱ·͍ͣ w෦԰͸γʔϯϑΝΠϧͰɺසൟʹ࡟আ͞ΕΔ wγʔϯ࡟আ࣌ʹ઀ଓ৘ใ͝ͱফ͞ΕΔ wΞΠςϜ৘ใ΋γʔϯ࠶ಡΈࠐΈ࣌ʹݩ௨Γ ઀ଓ৘ใ͸(BNF0CKFDUʹґଘͯ͠͸͍͚ͳ͍ɻ σʔλͱ(BNF0CKFDUΛ੾Γ཭͢ඞཁ͕͋Δ

  38. σʔλΫϥεͱ#FIBWJPVSʹ෼͚Δ public class Room { private RoomProperty roomProperty; public List<Door>

    doors; public List<Item> items; } public class Door { private Room parentRoom; public Door target; }
  39. σʔλΫϥεͱ#FIBWJPVSʹ෼͚Δ public class RoomBehaviour : MonoBehaviour { public Room roomData;

    public List<DoorBehaviour> doors; public List<ItemBoxBehaviour> itemBoxes; } public class DoorBehaviour : MonoBehaviour { public Door doorData; }
  40. σʔλΫϥεͱ#FIBWJPVSʹ෼͚Δ w3PPN͸෦԰ͷݱࡏͷঢ়گ υΞɺΞΠςϜ Λ࣋ͭ w%PPS͸઀ଓઌͷ%PPSΛ࣋ͭ wγʔϯ্ʹ͸3PPN#FIBWJPVS͕ҰͭɺυΞ͸ͦΕͧΕ%PPS#FIBWJPVSΛ࣋ͭ w͜ΕΒ͸΋Βͬͨ৘ใΛجʹҠಈॲཧ΍ΞΠςϜऔಘॲཧΛߦ͏͚ͩ w෦԰ΛಡΈࠐΉλΠϛϯάͰ#FIBWJPVSʹσʔλΛ౉ͯ͋͛͠Δ

  41. γʔϯΛϩʔυ͢Δ౓ʹݱࡏͷ෦԰৘ใΛ౉͢ .BJO(BNF )VNBO$POUSPM6* 3PPN 3PPN#FIBWJPVS 3PPN %PPS#FIBWJPVS %PPS#FIBWJPVS

  42. ෦԰ͷ੾Γସ͑ wͬ͘͟Γͱࡾͭͷॲཧ͕૸Δ  ৽͍͠෦԰ͷಡΈࠐΈ  ෦԰৘ใͷηοτΞοϓ  ݹ͍෦԰ͷ࡟আ

  43. ੾Γସ͑ॲཧ ؆ུԽ public void MoveRoom(Door door) { var target =

    door.target; SceneManager.sceneLoaded += (scene, mode) => { var root = scene.GetRootGameObjects().First() .GetComponent<RoomBehaviour>(); root.SetupRoomData(target.room); SceneManager.UnloadScene(door.room.name); }; SceneManager.LoadSceneAsync(target.room.name, LoadSceneMode.Additive); }
  44. ੾Γସ͑ॲཧ ؆ུԽ public void MoveRoom(Door door) { var target =

    door.target; SceneManager.sceneLoaded += (scene, mode) => { var root = scene.GetRootGameObjects().First() .GetComponent<RoomBehaviour>(); root.SetupRoomData(target.room); SceneManager.UnloadScene(door.room.name); }; SceneManager.LoadSceneAsync(target.room.name, LoadSceneMode.Additive); } ৽͍͠෦԰ΛಡΈࠐΉ
  45. ੾Γସ͑ॲཧ ؆ུԽ public void MoveRoom(Door door) { var target =

    door.target; SceneManager.sceneLoaded += (scene, mode) => { var root = scene.GetRootGameObjects().First() .GetComponent<RoomBehaviour>(); root.SetupRoomData(target.room); SceneManager.UnloadScene(door.room.name); }; SceneManager.LoadSceneAsync(target.room.name, LoadSceneMode.Additive); } ෦԰ʹݱࡏͷ৘ใΛ༩͑Δ
  46. ੾Γସ͑ॲཧ ؆ུԽ public void MoveRoom(Door door) { var target =

    door.target; SceneManager.sceneLoaded += (scene, mode) => { var root = scene.GetRootGameObjects().First() .GetComponent<RoomBehaviour>(); root.SetupRoomData(target.room); SceneManager.UnloadScene(door.room.name); }; SceneManager.LoadSceneAsync(target.room.name, LoadSceneMode.Additive); } ݹ͍෦԰ͷ࡟আ
  47. γʔϯͷ੾Γସ͑ wϩʔυͨ͠γʔϯͷத͔Β೚ҙͷ$PNQPOFOUΛऔΔͷ͕΍΍໘౗ w4DFOF(FU3PPU(BNF0CKFDUTͰώΤϥϧΩʔ௚Լͷ(BNF0CKFDU͸औΕΔ wSPPUΦϒδΣΫτ࡞ͬͯͦ͜ʹ؅ཧεΫϦϓτஔ͘ͷָ͕ͦ͏ wσΠϒ͸SPPUʹ3PPN#FIBWJPVSΛ͚ͭͯɺ͔ͦ͜Β෦԰ͱ΍ΓऔΓ͢Δ

  48. -PBE4DFOF"TZODͷ஫ҙ఺ wίʔϧόοΫ͕ݺ͹ΕΔλΠϛϯά͸ɺγʔϯͷಡΈࠐΈ͕׬ྃͨ࣌͠ wTDFOF಺ͷΦϒδΣΫτ͕ॳظԽ͞Ε͍ͯΔอূ͸ͳ͍ w4UBSUʹॳظԽॲཧॻ͍ͯͨΒ஫ҙ wϑϨʔϜ଴ͬͯॲཧ͢Δͱ࣮֬ wFWFOUͷߪಡղআ๨Εͳ͍Α͏ʹͶʂ

  49. 6OJ3Yͩͱ৭ʑָ public void MoveRoom(Door door) { var target = door.target;

    // ઀ଓઌͷυΞ͕͋ΔγʔϯΛϩʔυ SceneManager.LoadSceneAsync(target.room.name, LoadSceneMode.Additive) .AsObservable() .Select(__ => SceneManager.GetSceneByName(target.room.name)) .DelayFrame(1) .Subscribe(scene => { // ηοτΞοϓӠʑ }); }
  50. εΫϦϓτॻ͍ͯͷॴײ wಛผ൥ࡶʹͳΔ͜ͱ͸ͳ͔ͬͨ wඇಉظͰॲཧ͍͚ͯ͠Δͷ͸خ͍͠ wମײతʹɺ1SFGBCΛJOTUBOUJBUF͢ΔΑΓएׯ஗͍ʁ wγʔϯؒͷܨ͗͜Έॲཧ͕ඞਢʹͳͬͯ͘Δ

  51. ϚϧνγʔϯΤσΟοτ׆༻ͷ·ͱΊ w໾ׂ͝ͱʹγʔϯΛ੾Γ෼͚ΕΔ͔Β෼ۀ͕΍Γ΍͍͢ w୯ମγʔϯ 1SFGBCΑΓ͸ௐ੔࣌ͷख͕͔͔ؒΒͳ͍ wطଘγʔϯʹӨڹΛ༩͑ͳ͍ͷͰϝϯλϧʹ༏͍͠ wܨ͗͜Έͷ࢓૊Έ͸࣮૷͢Δඞཁ͕͋Δ w૯ͯ͡ɺඇϓϩάϥϚͷޮ཰Λ্͛Δͷʹ༗ޮ

  52. ࠷ޙʹ ͜Μͳ1SFGBC͸γʔϯʹͯ͠ྑ͍ͷͰ͸ͳ͍͔ʁͱ͍͏ײ૝ w ෳ਺ͷผͷ(BNF0CKFDU͕ࠞͬͯ͟Δ w (6*Ͱͷฤू࡞ۀ͕ଟ͍ w ̍ՕॴͰ͔͠࢖ͬͯͳ͍ w ୯ମͰ΋ػೳ͢Δ


    ֎෦ͷΦϒδΣΫτʹґଘ͠ͳ͍ σΠϒͷྫɿ w ෦԰͸κϯϏɾΞΠςϜɾصͳͲ͍ͬͺ͍͋Δ w ෦԰ͷ഑ஔͳͲ͸සൟʹߋ৽͢Δ w ׌ͭ࠶ར༻͢Δ͜ͱ͸ͳ͍ ద੾ʹ੾Γ෼͚ͯ޾ͤʹ։ൃ͍ͨ͠
  53. ͓ΘΓ