Share
Embed
複雑化する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の管理の全体を解説します。
QualiArts
August 30, 2017
Transcript
105 slides
-
ෳࡶԽ͢ΔAssetBundleͷ ৴͔Βϩʔυ·ͰΛج൫Խͨ͠ CEDEC2017 1 εϥΠυޙCEDiLʹͯެ։ ͠·͢ גࣜձࣾQualiArts ΦϧλφςΟϒΨʔϧζ ϦʔυΤϯδχΞ Ӭ
גࣜձࣾQualiArts ج൫ΤϯδχΞϦʔμʔ ੴࠇ ༞ี -
3 גࣜձࣾQualiArts ΦϧλφςΟϒΨʔϧζϦʔυΤϯδχΞ Ӭ גࣜձࣾαΠόʔΤʔδΣϯτʹ2011த్ೖࣾ αʔόαΠυΤϯδχΞͱͯ͠Amebaͷ՝ۚγεςϜɾج൫γεςϜͳ ͲΛܦͯήʔϜ෦ʹҟಈɻήʔϜͰΨʔϧϑϨϯυʢԾʣɺνͷඣ ༷͕Ұ൪ΧϫΠΠͷ։ൃʹैࣄɻݱࡏΦϧλφςΟϒΨʔϧζΛ୲ɻ
ΦϧλφςΟϒΨʔϧζͷ։ൃʹ͍ɺຊج൫ͷ։ൃ୲ɻ ήʔϜ෦ࢠձࣾԽʹ͍ɺݱࡏגࣜձࣾQualiArtsʹॴଐɻ ࣗݾհ -
ΞδΣϯμ ෳࡶԽ͢ΔAssetBundleͷ৴͔Βϩʔυ·ͰΛج൫Խͨ͠ - ج൫ԽͷܦҢ ʢզʑ͕าΜͰ͖ͨಓʣ - ཁ݅ఆٛ - جຊઃܭ -
αʔόઃܭ - ӡ༻ػೳ - UnitySDK - ·ͱΊ 6 -
AssetBundleͷ ཧ - ੈཧ͕ࠔ - Assetͷྔ͕ଟ͍ͷͰཧ͕େม ΫϥΠΞϯτ - ಉҰAssetBundleෳಉ࣌ʹϩʔυͰ͖ͳ͍ -
ʹΩϟογϡࡁΈͷݹ͍AssetBundleΛআ͢Δखஈ͕ެࣜʹແ͍ ֤λΠτϧͰݸผʹ։ൃ͍͕ͯͨ͠ɺࣗࣾͰج൫Λ։ൃ͢Δ͜ͱʹɻ 11 -
ࠓ·ͰͷήʔϜ 12 σβΠφʔ SVN jenkins AssetBundle build Game Server ΞϓϦ
σβΠφʔ SVN jenkins AssetBundle build Game Server ΞϓϦ -
࣮ݱΠϝʔδ 13 σβΠφʔ σβΠφʔ SVN jenkins AssetBundle build Game Server
ΞϓϦ Assetbundle ৴ج൫ SDK Game Server ΞϓϦ SDK ΞϓϦ SDK Game Server CLI ཧը໘ -
αʔόઃܭ 19 σβΠφʔ σβΠφʔ SVN jenkins AssetBundle build Game Server
ΞϓϦ Assetbundle ৴ج൫ SDK Game Server ΞϓϦ SDK ΞϓϦ SDK Game Server CLI ཧը໘ -
ಥൃతͳτϥϑΟοΫ ӡ༻ίετ - ϋʔυΣΞͷཧ - ηΩϡϦςΟʔ ࣾ֎͔ΒͷΞΫηε͕༰қ - VPN λΠϛϯά
- AWSͱͷൺֱݕূ 26 ͳͥGoogleCloudPlatformΛ࠾༻͔ͨ͠ -
ಥൃతͳτϥϑΟοΫ ӡ༻Λָʹ͍ͨ͠ - ߏཧ͕ෆཁ - ٕज़ͷशಘίετ γϯϓϧ - DockerFileͷΈ -
։ൃ͔Βຊ൪·ͰมΘΒͳ͍ڥ GKE͕͍͍ͨʂ 27 ίϯςφܕԾԽγεςϜDockerΛ࠾༻ͨ͠ཧ༝ -
ಥൃతͳτϥϑΟοΫ ϚωʔδυαʔϏε - Ϋϥελͷཧ ࢹ - StackDriverͱͷ࿈ܞ ϩά - CloudLogging
OSS - ๛ͳใ - ׆ൃͳίϛϡχςΟ 28 GoogleContainerEngine Google Container EngineΛ࠾༻ͨ͠ཧ༝ -
େྔσʔλͷΓͱΓ AssetBundle વϢʔβ͕େྔʹDL͢ΔͷͰߴͰ͋Δඞཁ͕͋Δ DBͷಉظ ͪ͜Β͕ҙ֎ͱϘτϧωοΫʹͳΔɻϨεϙϯεαΠζ͕MBʹͳΔ͜ͱ 29 CDN Content Delivery NetworkΛར༻ͯ͠ߴʹ৴
- CDN͔Β৴ - revisionͰΩϟογϡ - ETAGΛͬͨΩϟογϡίϯτϩʔϧ -
AssetBundleͷੈཧ 33 ϑΝΠϧA 1 શମ 0 શମ 1 ϑΝΠϧB 1
ϑΝΠϧAͱϑΝΠϧBΛՃɺϦϏδϣϯ̍ʹ -
AssetBundleͷੈཧ 34 ϑΝΠϧA 1 શମ 0 શମ 1 ϑΝΠϧB 1
ϑΝΠϧA 1 શମ 2 ϑΝΠϧB 1 ϑΝΠϧC 2 ϑΝΠϧCΛՃɺϦϏδϣϯ̎ʹ -
AssetBundleͷੈཧ 35 ϑΝΠϧA 1 શମ 0 શମ 1 ϑΝΠϧB 1
ϑΝΠϧA 1 શମ 2 ϑΝΠϧB 1 ϑΝΠϧC 2 ϑΝΠϧA 3 શମ 3 ϑΝΠϧB 1 ϑΝΠϧC 2 ϑΝΠϧAΛߋ৽ɺϦϏδϣϯ̏ʹ -
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ΛՃɺϦϏδϣϯ̐ʹ -
AssetBundleͷੈཧ 37 ϑΝΠϧA 3 શମ 4 ϑΝΠϧB 4 ϑΝΠϧC 2
ϑΝΠϧD 4 0 ͯ͢ͷϑΝΠϧΛऔಘ -
AssetBundleͷੈཧ 38 ϑΝΠϧA 3 શମ 4 ϑΝΠϧB 4 ϑΝΠϧC 2
ϑΝΠϧD 4 0 2 ϦϏδϣϯ̏Ҏ্Λऔಘ -
AssetBundleͷੈཧ 39 ϑΝΠϧA 3 શମ 4 ϑΝΠϧB 4 ϑΝΠϧC 2
ϑΝΠϧC 4 0 2 4 Կऔಘ͠ͳ͍ -
·ͱΊ αʔόઃܭͰղܾͨ͠༰ ΒΉσʔλྔ - GoogleCloudStrageΛ׆༻ͯ͠εέʔϥϒϧʹ ಥൃతͳτϥϑΟοΫ - GCPͱGKEΛར༻ͯ͠ॊೈͳΠϯϑϥʹ େྔσʔλͷΓͱΓ -
CDNΛͬͯAssetBundleͱDBͷࠩΛߴʹ৴ AssetBundleͷੈཧ - γϯϓϧͰཧ͍͢͠ΈΛಋೖ 40 -
࣮ݱΠϝʔδ 42 σβΠφʔ σβΠφʔ SVN jenkins AssetBundle build Game Server
ΞϓϦ Assetbundle ৴ج൫ SDK Game Server ΞϓϦ SDK ΞϓϦ SDK Game Server CLI ཧը໘ -
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ͷࠩΛ֬ೝ͢Δػೳ . . . -
ཧπʔϧ 44 σβΠφʔ σβΠφʔ SVN jenkins AssetBundle build Game Server
ΞϓϦ Assetbundle ৴ج൫ SDK Game Server ΞϓϦ SDK ΞϓϦ SDK Game Server CLI ཧը໘ -
Ϗϧυ͔ΒͷUpload 47 JenkinsͰສͷAssetBundleΛʑࠩϏϧυ͍ͯ͠Δ SVN͔Β Jenkinsʹ Πϯϙʔτ Unity5Ͱ AssetBundleΛ Ϗϧυ manifestϑΝΠϧΛ
OCTO-CLIʹ ͢ GCSʹUpload & OCTOʹొ -
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 -
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 -
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 ڥ̎ -
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͚ͩΛϐοΫΞοϓՄೳ -
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 -
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 ڥ̎ -
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 ڥ̍ ڥ̎ -
·ͱΊ 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 -
ࣗݾհ גࣜձࣾQualiArts ج൫ΤϯδχΞϦʔμʔ ੴࠇ ༞ี גࣜձࣾαΠόʔΤʔδΣϯτʹ2014৽ଔೖࣾ AmebaͷήʔϜ෦ʢݱגࣜձࣾQualiArtsʣͷج൫ʹଐ Ҏޙɺ༷ʑͳج൫ͷUnity SDKΛ։ൃ •
AssetBundleཧج൫ OCTOʢ͜Εʣ • Ϣʔβʔཧج൫ • ՝ۚج൫ • ϦΞϧλΠϜج൫ • νϟοτج൫ 57 -
Unity SDK ΞδΣϯμ 1. ͡Ίʹ a. ΫϥΠΞϯτ՝ b. ඞཁͳػೳ c.
։ൃϙϦγʔ 2. ॳظԽ 3. AssetBundleϩʔυ 4. ௨৴શൠ 5. ௨৴API 58 -
ΫϥΠΞϯτͷ՝ Unity API͚ͩͰඞཁ࠷ݶͷ͜ͱͰ͖Δ͕ɾɾɾ ࣗ༝͕͘ɺٻΊΔਫ४ͷίϯτϩʔϧ͕Ͱ͖ͳ͍ • AssetBundleϝλσʔλͷੈཧ ◦ γϯάϧϚχϑΣετͰࠩཧ͕͍͠ • AssetBundleΩϟογϡ
◦ ݹ͍Ωϟογϡͷআ͕͍͠ • AssetBundleͷϩʔυ ◦ ಉ͡AssetBundleΛϩʔυͰ͖ͳ੍͍ݶ • ௨৴ ◦ λΠϜΞτͳͲͷϋϯυϦϯά 59 -
AssetBundleΛཧ͢ΔSDKͱͯ͠ٻΊΒΕΔػೳ • ϩʔΧϧཧʢஔ͖͑ʣ ◦ AssetBundleϝλσʔλͷੈཧ ◦ AssetBundleΩϟογϡͷಠࣗཧ • AssetBundleͷϩʔυཧʢϥοϓʣ ◦
దͳλΠϛϯάͰͷϩʔυɾΞϯϩʔυ • ௨৴ ◦ APIαʔόʔͱͷ௨৴ ◦ AssetBundleͷμϯϩʔυ 61 -
ػೳશମਤ 62 ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF
ϝλσʔλ "TTFU#VOEMF (PPHMF$MPVE4UPSBHF ετϨʔδ -
ػೳશମਤ 63 ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF
ϝλσʔλ "TTFU#VOEMF (PPHMF$MPVE4UPSBHF ετϨʔδ -
ػೳશମਤ 64 ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF
ϝλσʔλ "TTFU#VOEMF (PPHMF$MPVE4UPSBHF ετϨʔδ -
ػೳશମਤ 65 ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF
ϝλσʔλ "TTFU#VOEMF (PPHMF$MPVE4UPSBHF ετϨʔδ -
։ൃϙϦγʔ • ύϑΥʔϚϯε ◦ ͲΜͳʹߴػೳͳSDKͰɺύϑΥʔϚϯε͕ѱ͍͚ͩͰΘΕͳ͘ͳΔ • ͲΜͳήʔϜ༷Ͱ͑Δࣗ༝ ◦ ൚༻తɾ࣮༻తAPI܈ •
͍ಋೖϋʔυϧ ◦ Unity APIͱͷ໊લతޓੑ ◦ ࠷ݶͷґଘϥΠϒϥϦ ※Unity 5.3ܥҎ্ର 66 -
Unity SDK ΞδΣϯμ 1. ͡Ίʹ 2. ॳظԽ a. ॳظԽͷྲྀΕ b.
ϩʔΧϧDB c. Ωϟογϡཧ 3. AssetBundleϩʔυ 4. ௨৴શൠ 5. ௨৴API 67 -
ΫϥΠΞϯτ Ωϟογϡ ϩʔΧϧ%# 0$50 6OJUZ4%, ಡΈॻ͖ ݕࡧΠϯσοΫε "TTFU#VOEMF ϝλσʔλ "TTFU#VOEMF
(PPHMF$MPVE4UPSBHF SDKॳظԽ 68 ετϨʔδ ॳظԽͰ͍ͬͯΔ͜ͱ • ϩʔΧϧDBϩʔυɾߋ৽ • Ωϟογϡࠪ -
ΫϥΠΞϯτͷॳظԽͷྲྀΕ 69 4%, ϩʔΧϧ%#ʹؔ͢Δॲཧ Ωϟογϡʹؔ͢Δॲཧ ΞϓϦىಈ 4%, ॳظԽ ϩʔΧϧ%# ಡΈࠐΈ
࠷৽ࠩऔಘ ϩʔΧϧ%# ߋ৽ Ωϟογϡ ࠪ Ωϟογϡ ൃݟ ΠϯσοΫε ొ Ωϟογϡ আ ਖ਼ৗ ҟৗ ݟ͔ͭΒͳ͘ͳΔ·Ͱϧʔϓ -
ΫϥΠΞϯτͷॳظԽͷྲྀΕ 70 4%, ϩʔΧϧ%#ʹؔ͢Δॲཧ Ωϟογϡʹؔ͢Δॲཧ ΞϓϦىಈ 4%, ॳظԽ ϩʔΧϧ%# ಡΈࠐΈ
࠷৽ࠩऔಘ ϩʔΧϧ%# ߋ৽ Ωϟογϡ ࠪ Ωϟογϡ ൃݟ ΠϯσοΫε ొ Ωϟογϡ আ ਖ਼ৗ ҟৗ ݟ͔ͭΒͳ͘ͳΔ·Ͱϧʔϓ -
ϩʔΧϧDBͱʁ ΞϓϦͰ͏શͯͷAssetBundleͳͲͷϝλσʔλΛੈཧ͢ΔDB • OCTOಠࣗใ ◦ ID ◦ λάใ ◦ ঢ়ଶɿ৽نɾߋ৽ɾআ
• AssetBundleใ ◦ ґଘؔ ◦ Unity AssetBundle CRC • ϑΝΠϧใ ◦ ϑΝΠϧαΠζ ◦ MD5ϋογϡ 71 -
C#ϝϞϦ༻ྔͷ࠷దԽྫ • ྫɿHogeΫϥεʹMD5ϋογϡΛอଘ͢Δ ◦ MD5ͷใྔʹ128bits (16bytes) • ͜ͷ࣌ϝϞϦͱͯ͠ඞཁͳྔʁ ◦ ඞཁ࠷ݶͰߟ͑Ε16bytes
◦ byte[]Ͱ࣋ͭͱʁ →56bytes (64bitڥͷ߹) ࠩͷ56 - 16 = 40bytesͲ͔͜Βདྷ͔ͨʁ 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 ࢀর ແବͳ෦ -
• ϑΟʔϧυͱͯ͠ͷ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 -
ΫϥΠΞϯτͷॳظԽͷྲྀΕ 77 4%, ϩʔΧϧ%#ʹؔ͢Δॲཧ Ωϟογϡʹؔ͢Δॲཧ ΞϓϦىಈ 4%, ॳظԽ ϩʔΧϧ%# ಡΈࠐΈ
࠷৽ࠩऔಘ ϩʔΧϧ%# ߋ৽ Ωϟογϡ ࠪ Ωϟογϡ ൃݟ ΠϯσοΫε ొ Ωϟογϡ আ ਖ਼ৗ ҟৗ ݟ͔ͭΒͳ͘ͳΔ·Ͱϧʔϓ -
Unityඪ४ͷΩϟογϡཧΛΘͳ͍ཧ༝ 79 ʢ࣌ͷʣUnityඪ४ͷΩϟογϡཧͷ • Ωϟογϡͷʹىಈ͕࣌ؒൺྫͯ͘͠ͳΔ →Ωϟογϡͷʹൺྫ͠ͳ͍Α͏ʹ • ͍ͬͯͳ͍Ωϟογϡͷࣗಈআͷظ͕ؒɺ150Ҏ্ʹઃఆͰ͖ͳ͍ →ࣗ༝ͳίϯτϩʔϧ •
ҟͳΔόʔδϣϯͷಉ໊ͷΩϟογϡΛผʹอଘ͢Δ →ಉ໊ͷΩϟογϡ্ॻ͖͢Δ • ݸผআͷAPI͕ͳ͍ →༻ҙ ※Unity 2017.1ʹͯআܥAPI͕Ճ -
ಠࣗΩϟογϡཧͷख๏ • ॳظԽͱಉ࣌ʹɺΩϟογϡࠪΛผεϨουͰ࢝ΊΔ ◦ ॳظԽʹ͔͔Δ࣌ؒද͖θϩʹ͍͠ ◦ ήʔϜଆ͔Βಉ࣌ʹΩϟογϡΛѻ͑ΔΑ͏ʹഉଞ੍ޚ ◦ ྃ͢Εɺ͋ͱΩϟογϡཧΛI/Oૢ࡞ͳ͠ͷίετͰѻ͑Δ •
ࣗಈআ͠ͳ͍ΦϓγϣϯΛ༻ҙ • Ωϟογϡͷཧ୯ҐΛ໊લ͚ͩͰߦ͏ ◦ ಉ໊͡લͷΩϟογϡ͕ෳอଘ͞Εͳ͍ ◦ ໊લʹΑΔݸผআ͜ΕͰՄೳʹ 80 -
Unity SDK ΞδΣϯμ 1. ͡Ίʹ 2. ॳظԽ 3. AssetBundleϩʔυ a.
ྲྀΕ b. ϩʔυཧ c. Resourceػೳ 4. ௨৴શൠ 5. ௨৴API 81 -
AssetBundleϩʔυ·ͰͷྲྀΕ 82 ϩʔυཧ "TTFU#VOEMF ϩʔυϦΫΤετ Ωϟογϡ ࡁΈ͔Ͳ͏͔ʁ "TTFU#VOEMF μϯϩʔυ Ωϟογϡʹ
อଘ Ωϟογϡ ͔Βϩʔυ "TTFU#VOEMF ϝϞϦొ "TTFU#VOEMF Ξϯϩʔυ :&4 /0 ϩʔυࡁΈ͔ Ͳ͏͔ʁ /0 ϝϞϦ͔Β "TTFU#VOEMFऔಘ :&4 ήʔϜʹ "TTFU#VOEMF͢ ඞཁͳ͚Ε -
ϩʔυཧͷख๏ ࢀরͰࣗಈతʹղ์ཧ ࢀর㲈ϩʔυ͠Α͏ͱͨ͠ճ - Ξϯϩʔυ͠Α͏ͱͨ͠ճ • Unityʹɺಉ͡AssetBundleΛผʹϩʔυ͍͚ͯ͠ͳ੍͍͕͋Δ ◦ طʹϩʔυࡁΈͷ߹ɺΩϟογϡ͍ͯ͠ΔAssetBundleΛฦ͢ •
ࢀরΛΧϯτ͠ɺࢀর͕0ʹͳͬͨΒΞϯϩʔυ͢ΔΑ͏ʹ • GameObjectͷੜࢮʹ࿈ಈͤͯ͞ɺࢀরΛ૿ݮͤ͞Δิॿ༻ͷίϯϙʔωϯτ 83 Asset Bundle Game Object ࢀরʹ3 -
Resourceػೳ AssetBundleҎ֎ͷͲΜͳϑΝΠϧѻ͑ΔɺResourceػೳ͋Γ →AssetBundleͱಉ͡ΈΛ͍ɺ৴ͱμϯϩʔυΛߦ͏ ϝϦοτ • ৴ ◦ ήʔϜଆ͕ϑΝΠϧ৴αʔόʔΛ༻ҙ͠ͳͯ͘৴Ͱ͖Δ ◦ AssetBundleͷϏϧυΛ௨ͣ͞ʹΞοϓϩʔυͰ͖Δ
! ΫϥΠΞϯτ ◦ AssetBundleͷΞϯύοΫίετ͕ͳ͍ ◦ Ի࠶ੜͳͲɺUnity֎Ͱͦͷ··͑Δ 84 -
Unity SDK ΞδΣϯμ 1. ͡Ίʹ 2. ॳظԽ 3. AssetBundleϩʔυ 4.
௨৴શൠ a. δϨϯϚ b. λΠϜΞτ੍ޚ 5. ௨৴API 85 -
௨৴APIͷδϨϯϚ ௨৴εϚϗ͚ήʔϜʹͱͬͯඞध Ϣʔβʔମݧʹ༩͑ΔӨڹେ͖͍Ώ͑ʹɺٕज़ྗͷ͕࣮ࠩʹݱΕΔॴ • ֤छίϯτϩʔϧ ◦ λΠϜΞτ ◦ ΤϥʔϋϯυϦϯά ◦
ϦτϥΠ ◦ ͳͲ • ߴͳ௨৴ʢ࣮ґଘͷ෦ʣ 86 Ͱ࣮ͷ͋Δߴػೳͳ௨৴ϥΠϒϥϦΛ࠾༻ͮ͠Β͍ʂ -
௨৴λΠϜΞτͷ 87 60ඵλΠϜΞτͰ50MBͷϑΝΠϧΛμϯϩʔυ͢Δ߹ 10Mbps (Ίͷ4Gఆ) 2Mbps (3Gఆ) 40ඵ 200ඵ λΠϜΞτϧʔϓ
௨৴ͷλΠϜΞτΛઈର͚࣌ؒͩͰߦ͏ͱɺ େ͖͍ϑΝΠϧΛͳ௨৴ڥͰμϯϩʔυྃͰ͖ͳ͘ͳΔ͕͋Δ -
λΠϜΞτແ௨৴͕ଓ͍ͨ࣌ؒͰఆ͢Δ • ୯७ʹຖϑϨʔϜɺड৴ͨ͠αΠζͷมԽΛ֬ೝ͢ΔͷΈ • 10ඵड৴͕ਐ·ͳ͔ͬͨΒλΠϜΞτఆ ݁Ռతʹ • ͳ௨৴ڥͰେ͖͍ϑΝΠϧΛμϯϩʔυͰ͖Δ • ௨৴͕ຊʹਐ·ͳ͘ͳͬͯૣΊʹλΠϜΞτͰ͖Δ
ແ௨৴࣌ؒʹΑΔλΠϜΞτ੍ޚ 88 ਖ਼ৗ ड৴த ड৴த ड৴த λΠϜΞτ ड৴த 10ඵड৴ͳ͠ -
Unity SDK ΞδΣϯμ 1. ͡Ίʹ 2. ॳظԽ 3. AssetBundleϩʔυ 4.
௨৴શൠ 5. ௨৴API a. APIͷબࢶͱಛ b. ޮతͳϑΝΠϧμϯϩʔυ c. APIͷ͍͚ 89 -
HttpWebRequest .NETඪ४ϥΠϒϥϦͷதʹ͋Δɺ௨৴API ϝϦοτ • ࣗ༝ߴ͍ σϝϦοτ • HTTPS௨৴͕Ͱ͖ͳ͍ ◦ σϑΥϧτͰTLSূ໌ॻͷݕূ͕αϙʔτ͞Ε͍ͯͳ͍ͨΊ
◦ ྫ֎తʹMac/iPhoneՄೳ 91 HTTPS͕͑ͳ͍ͷηΩϡϦςΟతʹNG -
WWWΛஔ͖͑Δ࣍ੈUnity API ϝϦοτ • ϫϯιʔεͰϚϧνϓϥοτϑΥʔϜରԠͰ͖Δ ◦ όοΫΤϯυϓϥοτϑΥʔϜݻ༗ͷ௨৴APIΛ༻͍ͨ௨৴ • ࣗ༝ͦΕͳΓ •
֦ு༻ͷΈ͋Γ UnityWebRequest 93 ͜Ε1ͭͰશͯͷέʔεʹରͯ͠ຬͰ͖ΔΘ͚Ͱͳ͍ -
DownloadHandlerScriptΛ༻͍ͯɺσʔλड৴ຖʹΧελϜॲཧΛC#Ͱهड़Ͱ͖Δ • ݻఆόοϑΝΛ࠶ར༻ ◦ େ͖͍ϑΝΠϧμϯϩʔυͰ͖Δ ◦ GCΛ͑Δ • ड৴ͱॻ͖ࠐΈͷύΠϓϥΠϯԽ ◦
ड৴ʹ͔͔Δ࣌ؒΛ༗ޮ׆༻ UnityWebRequest֦ு 96 -
ωΠςΟϒϓϥάΠϯͰͷϑΝΠϧμϯϩʔυ ωΠςΟϒϓϥάΠϯͰޮతʹϑΝΠϧΛμϯϩʔυ͢Δ͜ͱ͕Մೳ • C#ͷόοϑΝͷίϐʔ͕ͳ͘ͳΔ ◦ ࣌ؒॖ ◦ GCΛ͙ • ΑΓޮతͳύΠϓϥΠϯԽ͕Մೳ
• OSͷαϙʔτΛϑϧʹड͚ΒΕΔ ※Unity 2017.2 (beta)Ҏ߱Ͱ͋ΕɺެࣜͷDownloadHandlerFile͕͑Δ 100 -
ωΠςΟϒϓϥάΠϯͰϑΝΠϧμϯϩʔυͨ͠ 101 iOS/AndroidͰωΠςΟϒ࣮͠ɺ࣮ࡍʹύϑΥʔϚϯε͕վળ • ϝϞϦ༻ྔ • CPU༻ • μϯϩʔυ
UnityWebRequest֦ு ωΠςΟϒϓϥάΠϯ -
௨৴APIͷ͍͚ 102 ωΠςΟϒϓϥάΠϯ UnityWebRequest֦ு UnityWebRequest ϑΝΠϧʹอଘ͢Δ ύϑΥʔϚϯε ̋ ˚ ✕
ϑΝΠϧʹอଘ͠ͳ͍ ύϑΥʔϚϯε ˚ ˚ ˚ ࣮ίετ ✕ ˚ ̋ ϑΝΠϧʹอଘ͢Δ ϑΝΠϧʹอଘ͠ͳ͍ iOS/Android ωΠςΟϒϓϥάΠϯ UnityWebRequest ͦͷଞ UnityWebRequest֦ு -
SDKฤ·ͱΊ • શମ ◦ ٕज़νϟϨϯδ ◦ ύϑΥʔϚϯε্Ϣʔβʔମݧ্ʹܨ͕Δ • ϩʔΧϧཧ ◦
ϝλσʔλΛಠࣗཧ͢Δ͜ͱͰɺॊೈͳੈཧ͕Մೳʹ ◦ ಠࣗͷΩϟογϡཧʹΑͬͯɺήʔϜͷࣗ༝্ • ௨৴ ◦ ωΠςΟϒϓϥάΠϯͰޮతͳϑΝΠϧμϯϩʔυ͕Ͱ͖ͨ ◦ جຊUnityWebRequestͰͳ͠ ※௨৴APIͷݕূৄࡉԼهαΠόʔΤʔδΣϯτެࣜΤϯδχΞϒϩάʹͯ ʮUnityʹ͓͚Δ௨৴APIΛ৭ʑࢼͯ͠᠘Λ౿Μͩʯ https://developers.cyberagent.co.jp/blog/archives/6649/ 103