Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複雑化するAssetBundleの配信からロードまでを基盤化した話/CEDEC2017

8192a3d22a844b926f2e1bd7aef5fb25?s=47 QualiArts
August 30, 2017

 複雑化するAssetBundleの配信からロードまでを基盤化した話/CEDEC2017

http://cedec.cesa.or.jp/2017/session/PRD/s58e06b7e0013a/
https://cedil.cesa.or.jp/cedil_sessions/view/1638
Unityを利用する多くの会社がAssetBundleの管理に頭を悩ませているのではないでしょうか?私たちはそれらの処理を社内の共通基盤化し、開発の大幅効率化を実現しました。
本セッションではどのようにしてその基盤を作ったのか、配信方法からクライアントのSDK内部で行っている処理までを紹介します。
スケーラブルなサーバの実装から効率的なAssetのロードまでABの管理の全体を解説します。

8192a3d22a844b926f2e1bd7aef5fb25?s=128

QualiArts

August 30, 2017
Tweet

Transcript

  1. ෳࡶԽ͢ΔAssetBundleͷ ഑৴͔Βϩʔυ·ͰΛج൫Խͨ͠࿩ CEDEC2017 1 εϥΠυ͸ޙ೔CEDiLʹͯެ։ ͠·͢ גࣜձࣾQualiArts
 ΦϧλφςΟϒΨʔϧζ
 ϦʔυΤϯδχΞ
 ෱Ӭ

    ࿱ גࣜձࣾQualiArts
 ج൫ΤϯδχΞϦʔμʔ
 ੴࠇ ༞ี
  2. ͸͡Ίʹ UnityͷAssetBundle Έͳ͞Μӡ༻Ͱۤ࿑͞Εͯ·ͤΜ͔ʁ ຊηογϣϯͰ͸զʑ͕ͲͷΑ͏ʹۤ࿑͠ɺ AssetBundleͷ഑৴ج൫Λ࡞Δʹࢸ͔ͬͨΛ αʔόͷ؍఺ɺӡ༻ͷ؍఺ɺͦͯ͠UnitySDKͷ؍఺Ͱ঺հக͠·͢ɻ 2

  3. 3 גࣜձࣾQualiArts
 ΦϧλφςΟϒΨʔϧζϦʔυΤϯδχΞ
 ෱Ӭ ࿱ גࣜձࣾαΠόʔΤʔδΣϯτʹ2011೥த్ೖࣾ
 αʔόαΠυΤϯδχΞͱͯ͠Amebaͷ՝ۚγεςϜɾج൫γεςϜͳ ͲΛܦͯήʔϜ෦໳ʹҟಈɻήʔϜͰ͸ΨʔϧϑϨϯυʢԾʣɺ΢νͷඣ ༷͕Ұ൪ΧϫΠΠͷ։ൃʹैࣄɻݱࡏ͸ΦϧλφςΟϒΨʔϧζΛ୲౰ɻ 


    ΦϧλφςΟϒΨʔϧζͷ։ൃʹ൐͍ɺຊج൫ͷ։ൃ΋୲౰ɻ ήʔϜ෦໳ࢠձࣾԽʹ൐͍ɺݱࡏ͸גࣜձࣾQualiArtsʹॴଐɻ ࣗݾ঺հ
  4. ओཁλΠτϧ 5

  5. ΞδΣϯμ ෳࡶԽ͢ΔAssetBundleͷ഑৴͔Βϩʔυ·ͰΛج൫Խͨ͠࿩ - ج൫ԽͷܦҢ ʢզʑ͕าΜͰ͖ͨಓʣ - ཁ݅ఆٛ - جຊઃܭ -

    αʔόઃܭ - ӡ༻ػೳ - UnitySDK - ·ͱΊ 6
  6. ج൫ԽͷܦҢ զʑ͕าΜͰ͖ͨಓ 7

  7. ωΠςΟϒήʔϜԽ ϒϥ΢βήʔϜ͔ΒωΠςΟϒήʔϜ΁ ϊ΢ϋ΢͕·ͩͳ͍··ಥೖ 8

  8. ײͨ͜͡ͱ ܞଳػಛ༗ͷࣄ৘͕ଟ͍ CPUɾϝϞϦͷ੍໿ ಛघͳ௨৴؀ڥʢ3G/4G/WiFiͳͲ͕ಉډ͍ͯ͠Δʣ ଟ༷ͳ୺຤ͷଘࡏʢϑϥάϝϯςʔγϣϯʣ OSͷਐԽ 9 ΞϓϦαΠζͷ੍ݶ

  9. Unityಠࣗͷػೳ
 ෳ਺ͷAssetΛҰͭʹ·ͱΊͨ΋ͷ
 ϝϦοτ
 - ίϯςϯπͷߋ৽͕ࣗ༝ʹՄೳ
 - ΞϓϦͷ༰ྔ੍ݶΛղܾ 10 AssetBundleͱ͸

  10. AssetBundleͷ໰୊ ؅ཧ - ੈ୅؅ཧ͕ࠔ೉
 - Assetͷྔ͕ଟ͍ͷͰ؅ཧ͕େม ΫϥΠΞϯτ - ಉҰAssetBundle͸ෳ਺ಉ࣌ʹϩʔυͰ͖ͳ͍
 -

    ୺຤ʹΩϟογϡࡁΈͷݹ͍AssetBundleΛ࡟আ͢Δखஈ͕ެࣜʹ͸ແ͍ ֤λΠτϧͰݸผʹ։ൃ͍͕ͯͨ͠ɺࣗࣾͰج൫Λ։ൃ͢Δ͜ͱʹɻ 11
  11. ࠓ·ͰͷήʔϜ 12 σβΠφʔ SVN jenkins AssetBundle build Game Server ΞϓϦ

    σβΠφʔ SVN jenkins AssetBundle build Game Server ΞϓϦ
  12. ࣮ݱΠϝʔδ 13 σβΠφʔ σβΠφʔ SVN jenkins AssetBundle build Game Server

    ΞϓϦ Assetbundle ഑৴ج൫ SDK Game Server ΞϓϦ SDK ΞϓϦ SDK Game Server CLI ؅ཧը໘
  13. ཁ݅ఆٛ ͲΜͳج൫͕ཉ͍͠ͷ͔ 14

  14. ͲΜͳج൫͕ཉ͍͠ͷ͔ αʔό
 ӡ༻ָ͕
 ഑৴͕଎͍
 ਖ਼֬ SDK
 ಈ࡞͕ߴ଎
 ͲΜͳήʔϜͰ΋࢖͑Δ൚༻ੑ
 ࢖͍΍͍͢ 15

  15. جຊઃܭ ͲΜͳج൫ʹ͢Δͷ͔ 16

  16. ͲΜͳج൫ʹ͢Δͷ͔ αʔό
 αʔόͷ؅ཧΛͰ͖Δ͚ͩ͠ͳ͍
 ద੾ͳΩϟογϡΛ࢖͏
 Θ͔Γ΍͍͢ϩδοΫ SDK
 ௨৴଎౓Ͱ୺຤ͷݶքΛҾ͖ग़͢
 ҙਤͨ͠Ωϟογϡ؅ཧ͕Ͱ͖Δ
 Unity APIʹ͍ۙΠϯλʔϑΣʔεͷఏڙ

    17
  17. αʔόઃܭ 18

  18. αʔόઃܭ 19 σβΠφʔ σβΠφʔ SVN jenkins AssetBundle build Game Server

    ΞϓϦ Assetbundle ഑৴ج൫ SDK Game Server ΞϓϦ SDK ΞϓϦ SDK Game Server CLI ؅ཧը໘
  19. APIͷ঺հ DBಉظAPI
 αʔόDBͱΫϥΠΞϯτϩʔΧϧDBΛಉظ͢Δ URLऔಘAPI
 AssetBundleͷ࣮ମURLΛऔಘ͢Δ ΞοϓϩʔυAPI
 AssetBundleΛUpload͢Δ ࡟আAPI
 AssetBundleΛ࡟আ͢Δ etc...

    20
  20. αʔόʹ͓͚Δ՝୊ ࣮ࡍʹAssetBundleΛӡ༻͢Δࡍʹ໰୊ʹͳͬͨ఺ - ๲ΒΉσʔλྔ - ಥൃతͳτϥϑΟοΫ - େྔσʔλͷ΍ΓͱΓ - AssetBundleͷੈ୅؅ཧ

    21
  21. ๲ΒΉσʔλྔ 3DͷήʔϜ̍ϓϩδΣΫτ͋ͨΓɺAssetBundle͕े਺GBʙ਺ඦGBʹ΋ͳΓ͑Δɻ - ͋ͬͱ͍͏ؒʹҰഋʹͳΔετϨʔδ - ౓ॏͳΔαʔόͷ૿ઃ - ໘౗ͳϑΝΠϧͷ෼ࢄ 22

  22. ๲ΒΉσʔλྔ εέʔϥϏϦςΟ
 - ෳ਺ήʔϜͷେྔͷAssetBundle΋༰қʹ؅ཧ Multi Regional
 - ଱ো֐ੑ 23 GoogleCloudStorage

  23. ಥൃతͳτϥϑΟοΫ ήʔϜ͸༷ʑͳཁҼͰಥൃతʹτϥϑΟοΫ͕૿͑·͢ 24 ֤छΠϕϯτ TVCM

  24. ಥൃతͳτϥϑΟοΫ Google Cloud Platform docker GKE 25 GoogleContainerEngine

  25. ಥൃతͳτϥϑΟοΫ ӡ༻ίετ
 - ϋʔυ΢ΣΞͷ؅ཧ
 - ηΩϡϦςΟʔ ࣾ֎͔ΒͷΞΫηε͕༰қ
 - VPN౳ λΠϛϯά


    - AWSͱͷൺֱݕূ౳ 26 ͳͥGoogleCloudPlatformΛ࠾༻͔ͨ͠
  26. ಥൃతͳτϥϑΟοΫ ӡ༻Λָʹ͍ͨ͠
 - ߏ੒؅ཧ͕ෆཁ
 - ٕज़ͷशಘίετ γϯϓϧ
 - DockerFileͷΈ
 -

    ։ൃ͔Βຊ൪·ͰมΘΒͳ͍؀ڥ GKE͕࢖͍͍ͨʂ 27 ίϯςφܕԾ૝ԽγεςϜDockerΛ࠾༻ͨ͠ཧ༝
  27. ಥൃతͳτϥϑΟοΫ ϚωʔδυαʔϏε
 - Ϋϥελͷ؅ཧ ؂ࢹ
 - StackDriverͱͷ࿈ܞ ϩά
 - CloudLogging

    OSS
 - ๛෋ͳ৘ใ
 - ׆ൃͳίϛϡχςΟ 28 GoogleContainerEngine Google Container EngineΛ࠾༻ͨ͠ཧ༝
  28. େྔσʔλͷ΍ΓͱΓ AssetBundle
 ౰વϢʔβ͕େྔʹDL͢ΔͷͰߴ଎Ͱ͋Δඞཁ͕͋Δ DBͷಉظ
 ͪ͜Β͕ҙ֎ͱϘτϧωοΫʹͳΔɻϨεϙϯεαΠζ͕਺MBʹͳΔ͜ͱ΋ 29 CDN Content Delivery NetworkΛར༻ͯ͠ߴ଎ʹ഑৴

    
 - CDN͔Β഑৴ 
 - revisionͰΩϟογϡ
 - ETAGΛ࢖ͬͨΩϟογϡίϯτϩʔϧ
  29. AssetBundleͷੈ୅؅ཧ ੈ୅؅ཧʹٻΊΒΕ͍ͯͨػೳ - ϦϦʔεຖͷࠩ෼͕ͱΕΔ͜ͱ - ֤୺ຖʹҟͳΔࠩ෼΋؅ཧͰ͖Δ͜ͱ - AssetBundleͷߋ৽΋؅ཧͰ͖Δ͜ͱ 30

  30. AssetBundleͷੈ୅؅ཧ 31 શମͷϦϏδϣϯ ϑΝΠϧͷϦϏδϣϯ ୺຤ͷϦϏδϣϯ αʔΨଆDBͱΫϥΠΞϯτଆDBΛ؅ཧ͢ΔͨΊʹ̏ͭͷϦϏδϣϯΛ࢖༻

  31. AssetBundleͷੈ୅؅ཧ 32 શମ 0

  32. AssetBundleͷੈ୅؅ཧ 33 ϑΝΠϧA 1 શମ 0 શମ 1 ϑΝΠϧB 1

    ϑΝΠϧAͱϑΝΠϧBΛ௥ՃɺϦϏδϣϯ͸̍ʹ
  33. AssetBundleͷੈ୅؅ཧ 34 ϑΝΠϧA 1 શମ 0 શମ 1 ϑΝΠϧB 1

    ϑΝΠϧA 1 શମ 2 ϑΝΠϧB 1 ϑΝΠϧC 2 ϑΝΠϧCΛ௥ՃɺϦϏδϣϯ͸̎ʹ
  34. AssetBundleͷੈ୅؅ཧ 35 ϑΝΠϧA 1 શମ 0 શମ 1 ϑΝΠϧB 1

    ϑΝΠϧA 1 શମ 2 ϑΝΠϧB 1 ϑΝΠϧC 2 ϑΝΠϧA 3 શମ 3 ϑΝΠϧB 1 ϑΝΠϧC 2 ϑΝΠϧAΛߋ৽ɺϦϏδϣϯ͸̏ʹ
  35. AssetBundleͷੈ୅؅ཧ 36 ϑΝΠϧA 1 શମ 0 શମ 1 ϑΝΠϧB 1

    ϑΝΠϧA 1 શମ 2 ϑΝΠϧB 1 ϑΝΠϧC 2 ϑΝΠϧA 3 શମ 3 ϑΝΠϧB 1 ϑΝΠϧC 2 ϑΝΠϧA 3 શମ 4 ϑΝΠϧB 4 ϑΝΠϧC 2 ϑΝΠϧD 4 ϑΝΠϧBΛߋ৽ɺϑΝΠϧDΛ௥ՃɺϦϏδϣϯ͸̐ʹ
  36. AssetBundleͷੈ୅؅ཧ 37 ϑΝΠϧA 3 શମ 4 ϑΝΠϧB 4 ϑΝΠϧC 2

    ϑΝΠϧD 4 ୺຤ 0 ͢΂ͯͷϑΝΠϧΛऔಘ
  37. AssetBundleͷੈ୅؅ཧ 38 ϑΝΠϧA 3 શମ 4 ϑΝΠϧB 4 ϑΝΠϧC 2

    ϑΝΠϧD 4 ୺຤ 0 ୺຤ 2 ϦϏδϣϯ̏Ҏ্Λऔಘ
  38. AssetBundleͷੈ୅؅ཧ 39 ϑΝΠϧA 3 શମ 4 ϑΝΠϧB 4 ϑΝΠϧC 2

    ϑΝΠϧC 4 ୺຤ 0 ୺຤ 2 ୺຤ 4 Կ΋औಘ͠ͳ͍
  39. ·ͱΊ αʔόઃܭͰղܾͨ͠಺༰ ๲ΒΉσʔλྔ
 - GoogleCloudStrageΛ׆༻ͯ͠εέʔϥϒϧʹ ಥൃతͳτϥϑΟοΫ
 - GCPͱGKEΛར༻ͯ͠ॊೈͳΠϯϑϥʹ େྔσʔλͷ΍ΓͱΓ
 -

    CDNΛ࢖ͬͯAssetBundleͱDBͷࠩ෼Λߴ଎ʹ഑৴ AssetBundleͷੈ୅؅ཧ
 - γϯϓϧͰ؅ཧ͠΍͍͢࢓૊ΈΛಋೖ 40
  40. ӡ༻ػೳ 41

  41. ࣮ݱΠϝʔδ 42 σβΠφʔ σβΠφʔ SVN jenkins AssetBundle build Game Server

    ΞϓϦ Assetbundle ഑৴ج൫ SDK Game Server ΞϓϦ SDK ΞϓϦ SDK Game Server CLI ؅ཧը໘
  42. CLI 43 σβΠφʔ σβΠφʔ SVN jenkins AssetBundle build Game Server

    ΞϓϦ Assetbundle ഑৴ج൫ SDK Game Server ΞϓϦ SDK ΞϓϦ SDK Game Server CLI ؅ཧը໘ Command Line Interface $ AssetBundleΛUpload͢Δػೳ $ AssetBundleʹTagΛ͚ͭΔػೳ $ AssetBundleͷࠩ෼Λ֬ೝ͢Δػೳ . . .
  43. ؅ཧπʔϧ 44 σβΠφʔ σβΠφʔ SVN jenkins AssetBundle build Game Server

    ΞϓϦ Assetbundle ഑৴ج൫ SDK Game Server ΞϓϦ SDK ΞϓϦ SDK Game Server CLI ؅ཧը໘
  44. ϫʔΫϑϩʔ 45 OCTO-Dev OCTO-Stg OCTO-Prd Jenkins Upload Copy Sync

  45. Ϗϧυ͔ΒͷUpload 46 OCTO-Dev OCTO-Stg OCTO-Prd Jenkins Upload Copy Sync

  46. Ϗϧυ͔ΒͷUpload 47 JenkinsͰ਺ສ΋ͷAssetBundleΛ೔ʑࠩ෼Ϗϧυ͍ͯ͠Δ SVN͔Β Jenkinsʹ Πϯϙʔτ Unity5Ͱ AssetBundleΛ Ϗϧυ manifestϑΝΠϧΛ

    OCTO-CLIʹ ౉͢ GCSʹUpload & OCTOʹొ࿥
  47. DevɺStgɺPrd 48 ֤؀ڥͷ໾ׂ AssetBundleͷಈ͖ OCTO-Dev 9/1 ϦϦʔε GameDev 9/3 ϦϦʔε

    GameDev 9/7 ϦϦʔε GameDev 10/1 ϦϦʔε GameDev OCTO-Stg OCTO-Prd Jenkins Upload Copy Sync ɾɾɾ GameStg GamePrd
  48. Copy 49 OCTO-Dev 9/1 ϦϦʔε GameDev 9/3 ϦϦʔε GameDev 9/7

    ϦϦʔε GameDev 10/1 ϦϦʔε GameDev OCTO-Stg OCTO-Prd Jenkins Upload Copy Sync ɾɾɾ GameStg GamePrd
  49. Copy 50 ؀ڥ̍ fileA www.example.com/fileA revision:1 fileB www.example.com/fileB revision:2 fileC

    www.example.com/fileC revision:3 fileD www.example.com/fileD revision:4 fileA www.example.com/fileA revision:1 ؀ڥ̎
  50. Copy 51 ؀ڥ̍ fileA www.example.com/fileA revision:1 fileB www.example.com/fileB revision:2 fileC

    www.example.com/fileC revision:3 fileD www.example.com/fileD revision:4 fileA www.example.com/fileA revision:1 fileB www.example.com/fileB revision:2 fileD www.example.com/fileD revision:2 ؀ڥ̎ revision͸৽ͨʹৼΒΕΔ͕ࢀরϑΝΠϧ͸ಉҰ
 ඞཁͳAsset͚ͩΛϐοΫΞοϓՄೳ
  51. Sync 52 OCTO-Dev 9/1 ϦϦʔε GameDev 9/3 ϦϦʔε GameDev 9/7

    ϦϦʔε GameDev 10/1 ϦϦʔε GameDev OCTO-Stg OCTO-Prd Jenkins Upload Copy Sync ɾɾɾ GameStg GamePrd
  52. Sync 53 ؀ڥ̍ fileA www.example.com/fileA revision:1 fileB www.example.com/fileB revision:1 fileC

    www.example.com/fileC revision:2 fileD www.example.com/fileD revision:3 fileE www.example.com/fileE revision:3 fileA www.example.com/fileA revision:1 fileB www.example.com/fileB revision:1 ؀ڥ̎
  53. Sync 54 ࠩ෼Λrevision΋ؚΊͯ׬શʹίϐʔ
 ςετ׬ྃͨ͠΋ͷΛݶΓͳ͘ಉ͡ঢ়ଶͰຊ൪ʹίϐʔͰ͖Δɻ fileA www.example.com/fileA revision:1 fileB www.example.com/fileB revision:1

    fileC www.example.com/fileC revision:2 fileD www.example.com/fileD revision:3 fileE www.example.com/fileE revision:3 fileA www.example.com/fileA revision:1 fileB www.example.com/fileB revision:1 fileC www.example.com/fileC revision:2 fileD www.example.com/fileD revision:3 fileE www.example.com/fileE revision:3 ؀ڥ̍ ؀ڥ̎
  54. ·ͱΊ 55 CopyͱSyncػೳΛ࢖͍෼͚Δ͜ͱͰϑϨΩγϒϧͳӡ༻͕Մೳʹ ϛε΋ൃੜ͠ʹ͍͘ OCTO-Dev 9/1 ϦϦʔε GameDev 9/3 ϦϦʔε

    GameDev 9/7 ϦϦʔε GameDev 10/1 ϦϦʔε GameDev OCTO-Stg OCTO-Prd Jenkins Upload Copy Sync ɾɾɾ GameStg GamePrd
  55. Unity SDK 56

  56. ࣗݾ঺հ גࣜձࣾQualiArts ج൫ΤϯδχΞϦʔμʔ
 ੴࠇ ༞ี גࣜձࣾαΠόʔΤʔδΣϯτʹ2014೥৽ଔೖࣾ
 AmebaͷήʔϜ෦໳ʢݱגࣜձࣾQualiArtsʣͷج൫ʹ഑ଐ
 Ҏޙɺ༷ʑͳ಺੡ج൫ͷUnity SDKΛ։ൃ •

    AssetBundle؅ཧج൫ OCTOʢ͜Εʣ • Ϣʔβʔ؅ཧج൫ • ՝ۚج൫ • ϦΞϧλΠϜج൫ • νϟοτج൫ 57
  57. Unity SDK ΞδΣϯμ 1. ͸͡Ίʹ a. ΫϥΠΞϯτ՝୊ b. ඞཁͳػೳ c.

    ։ൃϙϦγʔ 2. ॳظԽ 3. AssetBundleϩʔυ 4. ௨৴શൠ 5. ௨৴API 58
  58. ΫϥΠΞϯτͷ՝୊ Unity API͚ͩͰඞཁ࠷௿ݶͷ͜ͱ͸Ͱ͖Δ͕ɾɾɾ
 ࣗ༝౓͕௿͘ɺٻΊΔਫ४ͷίϯτϩʔϧ͕Ͱ͖ͳ͍ • AssetBundleϝλσʔλͷੈ୅؅ཧ ◦ γϯάϧϚχϑΣετͰ͸ࠩ෼؅ཧ͕೉͍͠ • AssetBundleΩϟογϡ

    ◦ ݹ͍Ωϟογϡͷ࡟আ͕೉͍͠ • AssetBundleͷϩʔυ ◦ ಉ͡AssetBundleΛϩʔυͰ͖ͳ੍͍ݶ • ௨৴ ◦ λΠϜΞ΢τͳͲͷϋϯυϦϯά 59
  59. ՝୊Λղܾ͢ΔͨΊʹ • ࣗ༝౓ͷ޲্ɿUnityίϯϙʔωϯτͷஔ͖׵͑ • ίϯτϩʔϧྗͷ޲্ɿUnity APIͷϥοϓ • ௨৴඼࣭ͷ޲্ɿجຊతʹඪ४APIΛར༻ɺඞཁʹԠͯ͡ωΠςΟϒϓϥάΠϯ΋ 60

  60. AssetBundleΛ؅ཧ͢ΔSDKͱͯ͠ٻΊΒΕΔػೳ • ୺຤ϩʔΧϧ؅ཧʢஔ͖׵͑ʣ ◦ AssetBundleϝλσʔλͷੈ୅؅ཧ ◦ AssetBundleΩϟογϡͷಠࣗ؅ཧ • AssetBundleͷϩʔυ؅ཧʢϥοϓʣ ◦

    ద੾ͳλΠϛϯάͰͷϩʔυɾΞϯϩʔυ • ௨৴ ◦ APIαʔόʔͱͷ௨৴ ◦ AssetBundleͷμ΢ϯϩʔυ 61
  61. ػೳશମਤ 62 ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50
 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF

    ϝλσʔλ "TTFU#VOEMF (PPHMF$MPVE4UPSBHF ετϨʔδ
  62. ػೳશମਤ 63 ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50
 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF

    ϝλσʔλ "TTFU#VOEMF (PPHMF$MPVE4UPSBHF ετϨʔδ
  63. ػೳશମਤ 64 ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50
 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF

    ϝλσʔλ "TTFU#VOEMF (PPHMF$MPVE4UPSBHF ετϨʔδ
  64. ػೳશମਤ 65 ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50
 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF

    ϝλσʔλ "TTFU#VOEMF (PPHMF$MPVE4UPSBHF ετϨʔδ
  65. ։ൃϙϦγʔ • ύϑΥʔϚϯε ◦ ͲΜͳʹߴػೳͳSDKͰ΋ɺύϑΥʔϚϯε͕ѱ͍͚ͩͰ࢖ΘΕͳ͘ͳΔ • ͲΜͳήʔϜ࢓༷Ͱ΋࢖͑Δࣗ༝౓ ◦ ൚༻తɾ࣮༻తAPI܈ •

    ௿͍ಋೖϋʔυϧ ◦ Unity APIͱͷ໊લతޓ׵ੑ ◦ ࠷௿ݶͷґଘϥΠϒϥϦ ※Unity 5.3ܥҎ্ର৅ 66
  66. Unity SDK ΞδΣϯμ 1. ͸͡Ίʹ 2. ॳظԽ a. ॳظԽͷྲྀΕ b.

    ϩʔΧϧDB c. Ωϟογϡ؅ཧ 3. AssetBundleϩʔυ 4. ௨৴શൠ 5. ௨৴API 67
  67. ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50
 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF ϝλσʔλ "TTFU#VOEMF

    (PPHMF$MPVE4UPSBHF SDKॳظԽ 68 ετϨʔδ ॳظԽͰ΍͍ͬͯΔ͜ͱ • ϩʔΧϧDBϩʔυɾߋ৽ • Ωϟογϡ૸ࠪ
  68. ΫϥΠΞϯτͷॳظԽͷྲྀΕ 69 4%, ϩʔΧϧ%#ʹؔ͢Δॲཧ Ωϟογϡʹؔ͢Δॲཧ ΞϓϦىಈ 4%,
 ॳظԽ ϩʔΧϧ%# ಡΈࠐΈ

    ࠷৽ࠩ෼औಘ ϩʔΧϧ%#
 ߋ৽ Ωϟογϡ
 ૸ࠪ Ωϟογϡ
 ൃݟ ΠϯσοΫε ొ࿥ Ωϟογϡ
 ࡟আ ਖ਼ৗ ҟৗ ݟ͔ͭΒͳ͘ͳΔ·Ͱϧʔϓ
  69. ΫϥΠΞϯτͷॳظԽͷྲྀΕ 70 4%, ϩʔΧϧ%#ʹؔ͢Δॲཧ Ωϟογϡʹؔ͢Δॲཧ ΞϓϦىಈ 4%,
 ॳظԽ ϩʔΧϧ%# ಡΈࠐΈ

    ࠷৽ࠩ෼औಘ ϩʔΧϧ%#
 ߋ৽ Ωϟογϡ
 ૸ࠪ Ωϟογϡ
 ൃݟ ΠϯσοΫε ొ࿥ Ωϟογϡ
 ࡟আ ਖ਼ৗ ҟৗ ݟ͔ͭΒͳ͘ͳΔ·Ͱϧʔϓ
  70. ϩʔΧϧDBͱ͸ʁ ΞϓϦͰ࢖͏શͯͷAssetBundleͳͲͷϝλσʔλΛੈ୅؅ཧ͢ΔDB • OCTOಠࣗ৘ใ ◦ ID ◦ λά৘ใ ◦ ঢ়ଶɿ৽نɾߋ৽ɾ࡟আ

    • AssetBundle৘ใ ◦ ґଘؔ܎ ◦ Unity AssetBundle CRC • ϑΝΠϧ৘ใ ◦ ϑΝΠϧαΠζ ◦ MD5ϋογϡ 71
  71. ϩʔΧϧDBͷಛ௃ • GoogleͷProtocolBuffersͰ഑ྻͷ··γϦΞϥΠζ͠อଘ ◦ SQLite͸࢖Θͳ͍ɿґଘͷ࠷খԽɾ࣮ߦ࣌ύϑΥʔϚϯεͷͨΊ • AESͰ҉߸Խ ◦ ৘ใͷղੳɺσʔλͷൈ͖ग़͠ͳͲͷ߈ܸͷ೉қ౓Λ্͛ΔͨΊ •

    ࠩ෼ߋ৽ ◦ Ϩίʔυ୯Ґͷஔ׵ ◦ ௨৴ྔͷ࡟ݮ 72
  72. ϝϞϦফඅྔͷ཈੍ͷඞཁੑ ϩʔΧϧDB༻ͷݕࡧΠϯσοΫε͸ؾΛ͚ͭͳ͍ͱɺϝϞϦΛফඅ͢Δ • ϩʔΧϧDBͷϨίʔυ਺ʹAssetBundle਺ • ن໛΍ઃܭʹ΋ґΔ͕ɺ1ສ݅Λ௒͑Δ͜ͱ͸ී௨ • Ծʹ200bytes/Ϩίʔυͩͬͨͱ͢Δͱɺ2MB ӡ༻ΛॏͶΔͱ݅਺͸ඈ༂తʹ૿Ճ͠ɺஈʑϝϞϦΛѹഭ͢ΔཁҼʹ 73

  73. C#ϝϞϦ࢖༻ྔͷ࠷దԽྫ • ྫɿHogeΫϥεʹMD5ϋογϡΛอଘ͢Δ ◦ MD5ͷ৘ใྔʹ128bits (16bytes) • ͜ͷ࣌ϝϞϦͱͯ͠ඞཁͳྔ͸ʁ ◦ ඞཁ࠷௿ݶͰߟ͑Ε͹16bytes

    ◦ byte[]Ͱ࣋ͭͱʁ
 →56bytes (64bit؀ڥͷ৔߹) ࠩ෼ͷ56 - 16 = 40bytes͸Ͳ͔͜Βདྷ͔ͨʁ 74
  74. • byte[]͸ࢀরܕͰ͋ΔͨΊʢΞυϨε෼ʣ • ഑ྻࣗମͷΦʔόʔϔου • ϝϞϦΞϥΠϝϯτ౎߹ͷύσΟϯά ͳͥ૝ఆΑΓແବ͕ଟ͍͔ʁ 75 class Hoge

    { byte[] md5 = new byte[16]; } Πϯελϯε Φʔόʔϔου CZUFT CZUF<> CZUFT CZUF<> ΞυϨε CZUFT Πϯελϯε Φʔόʔϔου CZUFT ܕ৘ใ 5ZQF CZUFT ௕͞ JOU CZUFT QBEEJOH CZUFT ϝϞϦ
 ώʔϓྖҬ )PHFCZUFT CZUF<>CZUFT CZUF<> ΞυϨε CZUFT Πϯελϯε Φʔόʔϔου CZUFT ܕ৘ใ 5ZQF CZUFT ௕͞ JOU CZUFT QBEEJOH CZUFT ࢀর ແବͳ෦෼
  75. • ϑΟʔϧυͱͯ͠ͷstruct͸ɺHogeʹ಺แ͞ΕΔͨΊΦʔόʔϔουແ͠ • ݻఆ௕഑ྻͷ୅ΘΓʹɺྗٕͰ1όΠτͣͭల։͢Δ structͰ࠷దԽ͢Δͱ 76 class Hoge { MD5Struct

    md5; } struct MD5Struct { byte b0, b1, b2, …, b15; } Πϯελϯε Φʔόʔϔου CZUFT ϝϞϦ
 ώʔϓྖҬ )PHFCZUFT .%4USVDUCZUFT C  C  C  C  C  C  C  C  C  C  C   C   C   C   C   C  
  76. ΫϥΠΞϯτͷॳظԽͷྲྀΕ 77 4%, ϩʔΧϧ%#ʹؔ͢Δॲཧ Ωϟογϡʹؔ͢Δॲཧ ΞϓϦىಈ 4%,
 ॳظԽ ϩʔΧϧ%# ಡΈࠐΈ

    ࠷৽ࠩ෼औಘ ϩʔΧϧ%#
 ߋ৽ Ωϟογϡ
 ૸ࠪ Ωϟογϡ
 ൃݟ ΠϯσοΫε ొ࿥ Ωϟογϡ
 ࡟আ ਖ਼ৗ ҟৗ ݟ͔ͭΒͳ͘ͳΔ·Ͱϧʔϓ
  77. Unityඪ४ͷΩϟογϡ؅ཧΛ࢖Θͳ͍ཧ༝ 78 ʢ౰࣌ͷʣUnityඪ४ͷΩϟογϡ؅ཧͷ໰୊఺ • Ωϟογϡͷ਺ʹىಈ͕࣌ؒൺྫͯ͠஗͘ͳΔ
 • ࢖͍ͬͯͳ͍Ωϟογϡͷࣗಈ࡟আͷظ͕ؒɺ150೔Ҏ্ʹઃఆͰ͖ͳ͍
 • ҟͳΔόʔδϣϯͷಉ໊ͷΩϟογϡΛผʹอଘ͢Δ
 •

    ݸผ࡟আͷAPI͕ͳ͍

  78. Unityඪ४ͷΩϟογϡ؅ཧΛ࢖Θͳ͍ཧ༝ 79 ʢ౰࣌ͷʣUnityඪ४ͷΩϟογϡ؅ཧͷ໰୊఺ • Ωϟογϡͷ਺ʹىಈ͕࣌ؒൺྫͯ͠஗͘ͳΔ
 →Ωϟογϡͷ਺ʹൺྫ͠ͳ͍Α͏ʹ • ࢖͍ͬͯͳ͍Ωϟογϡͷࣗಈ࡟আͷظ͕ؒɺ150೔Ҏ্ʹઃఆͰ͖ͳ͍
 →ࣗ༝ͳίϯτϩʔϧ •

    ҟͳΔόʔδϣϯͷಉ໊ͷΩϟογϡΛผʹอଘ͢Δ
 →ಉ໊ͷΩϟογϡ͸্ॻ͖͢Δ • ݸผ࡟আͷAPI͕ͳ͍
 →༻ҙ ※Unity 2017.1ʹͯ࡟আܥAPI͕௥Ճ
  79. ಠࣗΩϟογϡ؅ཧͷख๏ • ॳظԽͱಉ࣌ʹɺΩϟογϡ૸ࠪΛผεϨουͰ࢝ΊΔ ◦ ॳظԽʹ͔͔Δ࣌ؒ͸ද޲͖θϩʹ౳͍͠ ◦ ήʔϜଆ͔Β΋ಉ࣌ʹΩϟογϡΛѻ͑ΔΑ͏ʹഉଞ੍ޚ΋ ◦ ׬ྃ͢Ε͹ɺ͋ͱ͸Ωϟογϡ؅ཧΛI/Oૢ࡞ͳ͠ͷ௿ίετͰѻ͑Δ •

    ࣗಈ࡟আ͠ͳ͍ΦϓγϣϯΛ༻ҙ • Ωϟογϡͷ؅ཧ୯ҐΛ໊લ͚ͩͰߦ͏ ◦ ಉ໊͡લͷΩϟογϡ͕ෳ਺อଘ͞Εͳ͍ ◦ ໊લʹΑΔݸผ࡟আ΋͜ΕͰՄೳʹ 80
  80. Unity SDK ΞδΣϯμ 1. ͸͡Ίʹ 2. ॳظԽ 3. AssetBundleϩʔυ a.

    ྲྀΕ b. ϩʔυ؅ཧ c. Resourceػೳ 4. ௨৴શൠ 5. ௨৴API 81
  81. AssetBundleϩʔυ·ͰͷྲྀΕ 82 ϩʔυ؅ཧ "TTFU#VOEMF
 ϩʔυϦΫΤετ Ωϟογϡ ࡁΈ͔Ͳ͏͔ʁ "TTFU#VOEMF
 μ΢ϯϩʔυ Ωϟογϡʹ


    อଘ Ωϟογϡ
 ͔Βϩʔυ "TTFU#VOEMF ϝϞϦొ࿥ "TTFU#VOEMF
 Ξϯϩʔυ :&4 /0 ϩʔυࡁΈ͔
 Ͳ͏͔ʁ /0 ϝϞϦ͔Β
 "TTFU#VOEMFऔಘ :&4 ήʔϜʹ
 "TTFU#VOEMF౉͢ ඞཁͳ͚Ε͹
  82. ϩʔυ؅ཧͷख๏ ࢀর਺Ͱࣗಈతʹղ์؅ཧ ࢀর਺㲈ϩʔυ͠Α͏ͱͨ͠ճ਺ - Ξϯϩʔυ͠Α͏ͱͨ͠ճ਺ • Unityʹ͸ɺಉ͡AssetBundleΛผʹϩʔυͯ͠͸͍͚ͳ੍͍໿͕͋Δ ◦ طʹϩʔυࡁΈͷ৔߹͸ɺΩϟογϡ͍ͯ͠ΔAssetBundleΛฦ͢ •

    ࢀর਺ΛΧ΢ϯτ͠ɺࢀর͕0ʹͳͬͨΒΞϯϩʔυ͢ΔΑ͏ʹ • GameObjectͷੜࢮʹ࿈ಈͤͯ͞ɺࢀর਺Λ૿ݮͤ͞Δิॿ༻ͷίϯϙʔωϯτ 83 Asset
 Bundle Game
 Object ࢀর਺ʹ3
  83. Resourceػೳ AssetBundleҎ֎ͷͲΜͳϑΝΠϧ΋ѻ͑ΔɺResourceػೳ΋͋Γ
 →AssetBundleͱಉ͡࢓૊ΈΛ࢖͍ɺ഑৴ͱμ΢ϯϩʔυΛߦ͏ ϝϦοτ • ഑৴ ◦ ήʔϜଆ͕ϑΝΠϧ഑৴αʔόʔΛ༻ҙ͠ͳͯ͘΋഑৴Ͱ͖Δ ◦ AssetBundleͷϏϧυΛ௨ͣ͞ʹ௚઀ΞοϓϩʔυͰ͖Δ

    ! ΫϥΠΞϯτ ◦ AssetBundleͷΞϯύοΫίετ͕ͳ͍ ◦ Ի੠࠶ੜͳͲɺUnity֎Ͱ΋ͦͷ··࢖͑Δ 84
  84. Unity SDK ΞδΣϯμ 1. ͸͡Ίʹ 2. ॳظԽ 3. AssetBundleϩʔυ 4.

    ௨৴શൠ a. δϨϯϚ b. λΠϜΞ΢τ੍ޚ 5. ௨৴API 85
  85. ௨৴APIͷδϨϯϚ ௨৴͸εϚϗ޲͚ήʔϜʹͱͬͯඞध඼
 Ϣʔβʔମݧʹ༩͑ΔӨڹ͸େ͖͍Ώ͑ʹɺٕज़ྗͷ͕ࠩ೗࣮ʹݱΕΔ৔ॴ • ֤छίϯτϩʔϧ ◦ λΠϜΞ΢τ ◦ ΤϥʔϋϯυϦϯά ◦

    ϦτϥΠ ◦ ͳͲ • ߴ଎ͳ௨৴ʢ࣮૷ґଘͷ෦෼ʣ 86 Ͱ΋࣮੷ͷ͋Δߴػೳͳ௨৴ϥΠϒϥϦΛ࠾༻ͮ͠Β͍ʂ
  86. ௨৴λΠϜΞ΢τͷ໰୊ 87 60ඵλΠϜΞ΢τͰ50MBͷϑΝΠϧΛμ΢ϯϩʔυ͢Δ৔߹ 10Mbps
 (஗Ίͷ4G૝ఆ) 2Mbps
 (3G૝ఆ) 40ඵ 200ඵ λΠϜΞ΢τϧʔϓ

    ௨৴ͷλΠϜΞ΢τΛઈର͚࣌ؒͩͰߦ͏ͱɺ
 େ͖͍ϑΝΠϧΛ௿଎ͳ௨৴؀ڥͰμ΢ϯϩʔυ׬ྃͰ͖ͳ͘ͳΔ໰୊͕͋Δ
  87. λΠϜΞ΢τ͸ແ௨৴͕ଓ͍ͨ࣌ؒͰ൑ఆ͢Δ • ୯७ʹຖϑϨʔϜɺड৴ͨ͠αΠζͷมԽΛ֬ೝ͢ΔͷΈ • 10ඵड৴͕ਐ·ͳ͔ͬͨΒλΠϜΞ΢τ൑ఆ ݁Ռతʹ • ௿଎ͳ௨৴؀ڥͰ΋େ͖͍ϑΝΠϧΛμ΢ϯϩʔυͰ͖Δ • ௨৴͕ຊ౰ʹਐ·ͳ͘ͳͬͯ΋ૣΊʹλΠϜΞ΢τͰ͖Δ

    ແ௨৴࣌ؒʹΑΔλΠϜΞ΢τ੍ޚ 88 ਖ਼ৗ ड৴த ड৴த ड৴த λΠϜΞ΢τ ड৴த 10ඵड৴ͳ͠
  88. Unity SDK ΞδΣϯμ 1. ͸͡Ίʹ 2. ॳظԽ 3. AssetBundleϩʔυ 4.

    ௨৴શൠ 5. ௨৴API a. APIͷબ୒ࢶͱಛ௃ b. ޮ཰తͳϑΝΠϧμ΢ϯϩʔυ c. APIͷ࢖͍෼͚ 89
  89. ௨৴APIͷબ୒ࢶ ඪ४Ͱ࢖͑ΔൣғͰɺ͍Ζ͍ΖͳAPI͕͋Δ • HttpWebRequest • WWW • UnityWebRequest • ωΠςΟϒϓϥάΠϯͷ࣮૷

    90
  90. HttpWebRequest .NETඪ४ϥΠϒϥϦͷதʹ͋Δɺ௨৴API ϝϦοτ • ࣗ༝౓͸ߴ͍ σϝϦοτ • HTTPS௨৴͕Ͱ͖ͳ͍ ◦ σϑΥϧτͰTLSূ໌ॻͷݕূ͕αϙʔτ͞Ε͍ͯͳ͍ͨΊ

    ◦ ྫ֎తʹMac/iPhone͸Մೳ 91 HTTPS͕࢖͑ͳ͍ͷ͸ηΩϡϦςΟతʹNG
  91. WWW ݹ͔͘ΒUnityͰఏڙ͞Ε͍ͯΔ௨৴API ઃܭ͕ݹ͘ɺػೳ΋֦ுੑ΋๡͍͠
 UnityWebRequest͕͋Δࠓͱͳͬͯ͸࢖͏ཧ༝͕ͳ͍ 92

  92. WWWΛஔ͖׵͑Δ࣍ੈ୅Unity API ϝϦοτ • ϫϯιʔεͰϚϧνϓϥοτϑΥʔϜରԠͰ͖Δ ◦ όοΫΤϯυ͸ϓϥοτϑΥʔϜݻ༗ͷ௨৴APIΛ༻͍ͨ௨৴ • ࣗ༝౓͸ͦΕͳΓ •

    ֦ு༻ͷ࢓૊Έ͋Γ UnityWebRequest 93 ͜Ε1ͭͰશͯͷέʔεʹରͯ͠ຬ଍Ͱ͖ΔΘ͚Ͱ͸ͳ͍
  93. UnityWebRequestͰϑΝΠϧΛอଘ͢Δͱ 94 ΫϥΠΞϯτ ετϨʔδ $ ωΠςΟϒ GC

  94. ͜Ε͕ཧ૝ 95 ΫϥΠΞϯτ ετϨʔδ $ ωΠςΟϒ

  95. DownloadHandlerScriptΛ༻͍ͯɺσʔλड৴ຖʹΧελϜॲཧΛC#Ͱهड़Ͱ͖Δ • ݻఆ௕όοϑΝΛ࠶ར༻ ◦ େ͖͍ϑΝΠϧ΋μ΢ϯϩʔυͰ͖Δ ◦ GCΛ཈͑Δ • ड৴ͱॻ͖ࠐΈͷύΠϓϥΠϯԽ ◦

    ड৴ʹ͔͔Δ࣌ؒΛ༗ޮ׆༻ UnityWebRequest֦ு 96
  96. UnityWebRequest֦ுͰϑΝΠϧΛอଘ͢Δͱ 97 ΫϥΠΞϯτ ετϨʔδ $ ωΠςΟϒ

  97. UnityWebRequest֦ுͰϑΝΠϧμ΢ϯϩʔυͨ͠ ࣮૷ͯ͠ΈͯɺΠϚΠνͳ݁Ռʹɾɾɾ ӽ͑ΒΕͳ͍น • C#΁ͷϝϞϦίϐʔͷίετ͸ආ͚ΒΕͳ͍ • ड৴Πϕϯτ͕ϝΠϯεϨουͰݺ͹ΕΔ ◦ DownloadHandlerScriptͷ࢓༷ 98

  98. ಠࣗʹωΠςΟϒ࣮૷͠ɺC#͔Βݺͼग़͢ ϝϦοτ • ύϑΥʔϚϯε΍ࣗ༝౓͸࠷ߴ • ϑΝΠϧอଘͰڧྗͳύϑΥʔϚϯεΛൃش͢Δ σϝϦοτ • ࣮૷΍อकίετ΋ϓϥοτϑΥʔϜ෼ඞཁʹͳΔ •

    όάͷ֮ޛ ωΠςΟϒϓϥάΠϯ 99
  99. ωΠςΟϒϓϥάΠϯͰͷϑΝΠϧμ΢ϯϩʔυ ωΠςΟϒϓϥάΠϯͰޮ཰తʹϑΝΠϧΛμ΢ϯϩʔυ͢Δ͜ͱ͕Մೳ • C#΁ͷόοϑΝͷίϐʔ͕ͳ͘ͳΔ ◦ ࣌ؒ୹ॖ ◦ GCΛ๷͙ • ΑΓޮ཰తͳύΠϓϥΠϯԽ͕Մೳ

    • OSͷαϙʔτΛϑϧʹड͚ΒΕΔ ※Unity 2017.2 (beta)Ҏ߱Ͱ͋Ε͹ɺެࣜͷDownloadHandlerFile͕࢖͑Δ 100
  100. ωΠςΟϒϓϥάΠϯͰϑΝΠϧμ΢ϯϩʔυͨ͠ 101 iOS/AndroidͰωΠςΟϒ࣮૷͠ɺ࣮ࡍʹύϑΥʔϚϯε͕վળ • ϝϞϦ࢖༻ྔ • CPU࢖༻཰ • μ΢ϯϩʔυ଎౓ 


    UnityWebRequest֦ு ωΠςΟϒϓϥάΠϯ
  101. ௨৴APIͷ࢖͍෼͚ 102 ωΠςΟϒϓϥάΠϯ UnityWebRequest֦ு UnityWebRequest ϑΝΠϧʹอଘ͢Δ
 ύϑΥʔϚϯε ̋ ˚ ✕

    ϑΝΠϧʹอଘ͠ͳ͍
 ύϑΥʔϚϯε ˚ ˚ ˚ ࣮૷ίετ ✕ ˚ ̋ ϑΝΠϧʹอଘ͢Δ ϑΝΠϧʹอଘ͠ͳ͍ iOS/Android ωΠςΟϒϓϥάΠϯ UnityWebRequest ͦͷଞ UnityWebRequest֦ு
  102. SDKฤ·ͱΊ • શମ ◦ ٕज़νϟϨϯδ ◦ ύϑΥʔϚϯε޲্͸Ϣʔβʔମݧ޲্ʹܨ͕Δ • ୺຤ϩʔΧϧ؅ཧ ◦

    ϝλσʔλΛಠࣗ؅ཧ͢Δ͜ͱͰɺॊೈͳੈ୅؅ཧ͕Մೳʹ ◦ ಠࣗͷΩϟογϡ؅ཧʹΑͬͯɺήʔϜͷࣗ༝౓޲্ • ௨৴ ◦ ωΠςΟϒϓϥάΠϯͰޮ཰తͳϑΝΠϧμ΢ϯϩʔυ͕Ͱ͖ͨ ◦ جຊ͸UnityWebRequestͰ໰୊ͳ͠ ※௨৴APIͷݕূৄࡉ͸ԼهαΠόʔΤʔδΣϯτެࣜΤϯδχΞϒϩάʹͯ
 ʮUnityʹ͓͚Δ௨৴APIΛ৭ʑࢼͯ͠᠘Λ౿Μͩ࿩ʯ
 https://developers.cyberagent.co.jp/blog/archives/6649/ 103
  103. ·ͱΊ Քಇͯ͠1೥͕ܦա 104

  104. ӡ༻࣮੷ 105 3λΠτϧɺ4ϲࠃʹͯӡ༻த ೔ຊ ؖࠃ λΠ ୆࿷

  105. ج൫Խͨ݁͠Ռ • ޻਺࡟ݮɿंྠͷ࠶ൃ໌͕ͳ͘ͳͬͨ • ඼࣭୲อɿ࣮૷඼࣭ͷ҆ఆʹ΋د༩ • UX޲্ɿϢʔβʹՁ஋Λಧ͚Δ ࠓޙ • μ΢ϯϩʔυ͢ΔͨΊͷURLΛຖճऔಘ͢Δඞཁ͕͋ΔͷΛվળ

    • UnityͷਐԽʹ௥ै͢Δ 106