Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
スマホゲームを作ったよ
Search
いも
November 19, 2016
Programming
3
2.5k
スマホゲームを作ったよ
初めてリリースしたiOSアプリの紹介と、マルチシーンエディットの活用事例です
いも
November 19, 2016
Tweet
Share
More Decks by いも
See All by いも
UnityプログラミングバイブルR6号宣伝&Unity Logging小話
adarapata
0
440
Unityテスト活動のふりかえり
adarapata
1
530
Gather.townはいいぞ その後
adarapata
1
1.5k
Unityでの開発事例
adarapata
3
22k
どこのご家庭にもあるシーンマネージャーの話
adarapata
1
7.7k
Gather.townはいいぞ
adarapata
2
2.3k
宴はいいぞ
adarapata
0
1.4k
わかった気になるモブプログラミング
adarapata
1
99
モブワークっぽいのをやっている話/Trying mobwork
adarapata
2
1.2k
Other Decks in Programming
See All in Programming
「個人開発マネタイズ大全」が教えてくれたこと
bani24884
1
240
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
230
[JAWS DAYS 2025] 最近の DB の競合解決の仕組みが分かった気になってみた
maroon1st
0
130
推しメソッドsource_locationのしくみを探る - はじめてRubyのコードを読んでみた
nobu09
2
330
Domain-Driven Design (Tutorial)
hschwentner
13
22k
TCAを用いたAmebaのリアーキテクチャ
dazy
0
200
Unity Android XR入門
sakutama_11
0
180
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
41
16k
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
310
AWS Step Functions は CDK で書こう!
konokenj
4
220
Rails 1.0 のコードで学ぶ find_by* と method_missing の仕組み / Learn how find_by_* and method_missing work in Rails 1.0 code
maimux2x
1
250
生成AIで加速するテスト実装 - ロリポップ for Gamersの事例と 生成AIエディタの活用
kinosuke01
0
130
Featured
See All Featured
Become a Pro
speakerdeck
PRO
26
5.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
How to Think Like a Performance Engineer
csswizardry
22
1.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
A Philosophy of Restraint
colly
203
16k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
A Tale of Four Properties
chriscoyier
158
23k
Transcript
ϚϧνγʔϯΤσΟοτ͍͍ͧ Ҫຊେొ(.01&1"#0JOD 6OJUZ'VLVPLB εϚϗήʔϜΛ࡞ͬͨΑ
ΤϯδχΞ Ҫຊେొ !BEBSBQBUB ϩϦϙοϓάϧʔϓ8&#։ൃνʔϜ
ࠓͷ͓ wJ04͚ήʔϜʮϦϏϯάσΠϒʯͷհ wϚϧνγʔϯͷ׆༻ࣄྫ
ϦϏϯάσΠϒ
ϦϏϯάσΠϒ wσΠϒΛૢ࡞ͯ͠ձ͔ࣾΒୀۈ͢ΔΞΫγϣϯήʔϜ wୀۈ͢ΔͨΊʹࡾͭͷΩʔΞΠςϜΛೖख͍ͯ͘͠ wΩʔΞΠςϜΛೖखͯ͠ग़ޱʹ͔͑ΫϦΞʔ wࣾһʹั·Δͱઆಘ ߈ܸ ͞ΕͯμϝʔδΛड͚Δ wϓϨΠ͢Δͨͼʹ෦ͷߏ͕มԽ͢Δ wϓϨΠͷํʹΑ༷ͬͯʑͳশ߸ΛऔಘͰ͖ɺୀۈྗ$ʙ4ͰධՁ͞ΕΔ w࣮ࡏ͢Δاۀͱͷؔ࿈Ұ͋Γ·ͤΜ
σΠϒͷཪଆ w6OJUZ wϓϩάϥϚ̍ਓɺσβΠφ̍ਓɺҰϲ݄΄Ͳ w%Ϟσϧશͯ4ZOUZ4UVEJPTͷΞηοτΛར༻ wεΫϦϓτܥΞηοτ6OJ3Yͱ"SCPSΛ༻ wϒϥϯͬΆ͍දݱͷ͙ͨ͢͞ΜͷϒϩάهࣄΛࢀߟʹͨ͠
Ξηοτհ
6OJ3Y wIUUQTXXXBTTFUTUPSFVOJUZEDPNKQDPOUFOU w3FBDUJWF&YUFOTJPOTΛ6OJUZͰ࣮Ͱ͖ΔΑ͏ʹͳΔϥΠϒϥϦ wͱΓ͢ʔ͞ΜͷεϥΠυΛݟΑ͏ʂ wϦϏϯάσΠϒׂ̔6OJ3YͰॻ͍ͯΔ
"SCPS wIUUQDBJUTJUIXBSFDPNXPSEQSFTT wέοτγʔΣΞ͞Μ࡞ͷΞηοτ wεςʔτϚγϯΛ؆୯ʹ࡞Ͱ͖ΔΤσΟλ֦ு w൚༻తͳػೳඪ४Ͱἧ͍ͬͯΔ ࣗ࡞εΫϦϓτͷՃ͕؆୯ w
࣮ࡍͷਧ͖ग़͠߈ܸͷ࣮
Ϛϧνγʔϯͷ׆༻ࣄྫ 1.
୯ମγʔϯͰઃܭ͢Δ߹ Ұྫ wૉʹγʔϯΛ-PBE͢Δɻ̍γʔϯʹෳͷ1SFGBC͕͋Δ wήʔϜͷγεςϜͷΦϒδΣΫτ 1(͕Α͘৮Δ wഎܠɺϑΟʔϧυͳͲͷΦϒδΣΫτ σβΠφ͕Α͘৮Δ wγʔϯΛ͓ޓ͍ʹ৮Δͱਏ͍ͷͰɺखݩͰ࡞ͬͨͷΛ1SFGBCԽ
w1SFGBCΛγʔϯʹೖΕ࣮ͯྃʂ େݩͷγʔϯʹɺΈΜͳ͕࡞ͬͨ1SFGBC͕Ճ͞Ε͍ͯ͘Πϝʔδ
͜ΕΛϚϧνγʔϯͰସͰ͖ͳ͍͔ʁ
Ϛϧνγʔϯͷ׆༻ࣄྫJOϦϏϯάσΠϒ w(6*ͰͷϚϧνγʔϯΤσΟοτͷ׆༻ wεΫϦϓτͰͷ4DFOF.BOBHFSͷ׆༻
Ϛϧνγʔϯͷ׆༻ࣄྫJOϦϏϯάσΠϒ w(6*ͰͷϚϧνγʔϯΤσΟοτͷ׆༻ wεΫϦϓτͰͷ4DFOF.BOBHFSͷ׆༻
෦ΛͲ͏࡞Δʁ Ұͭͷ෦ʹೖͬͯΔΦϒδΣΫτ w κϯϏ w นɾҜࢠͳͲݐͷใ w ϥΠτɺΧϝϥͳͲͷใ ͜ΕΒΛͲ͏ཧ͢Δʁ ·ͱΊͯ1SFGBCԽ͢Δͱ͍͏ख͋Δ͚Ͳɾɾ
ڊେͳ1SFGBCѻ͍ʹ͍͘ wࢠͷΦϒδΣΫτͷมߋΛͮ͠Β͍ wκϯϏͷҐஔมߋසൟʹى͜Γ͏Δมߋ wγʔϯʹ࣋ͬͯߦͬͯ࿔ͬͯߋ৽ɾɾͱ͍͏खؒ wͦͷͨΊͷTBOECPYతγʔϯͷ༻ҙ w*OTUBOUJBUFͰগ͠ࢭ·ΔՄೳੑ 3FTPVSDFT-PBE"TZODͱ͍͏ํ๏͋Δ wϨϕϧσβΠϯ࣌ʹ༏͘͠ͳ͍ཧํ๏ʹͳΔ
γʔϯϑΝΠϧͰཧͨ͠ํ͕ײతͰʁ
ϚϧνγʔϯΤσΟςΟϯάΛ͏
ϚϧνγʔϯΤσΟοτػೳ w͔Βೖͬͨػೳ wෳͷγʔϯΛಉ࣌ʹฤूͰ͖Δ wಈతʹγʔϯ୯ҐͰͷՃɾআ͕Մೳ wׂͰγʔϯΛׂ͢Δ͜ͱͰɺͭΒ͍ίϯϑϦΫτΛ͛Δ
εΫϦϓτͰͷγʔϯͷॏͶํ SceneManager.LoadScene(sceneName, LoadSceneMode.Additive); SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); ඇಉظͰಡΈࠐΊΔɻ ಡΈࠐΈྃɺআྃͷίʔϧόοΫ͋Δ SceneManager.sceneLoaded += (scene,
mode) => {}; SceneManager.sceneUnLoaded += (scene) => {};
ϦϏϯάσΠϒͷϝΠϯ෦̏ͭͷγʔϯΛॏͶ͍ͯΔ .BJO(BNF )VNBO$POUSPM6* 3PPN
3PPNγʔϯ w ෦Λߏ͢Δγʔϯ w γʔϯԼʹࢄΒ͔ͣ͞3PPUΛڬΉ w ݐɺκϯϏɺΧϝϥFUD w ෦ΛҠಈ͢Δʹಈతʹੜɺഁ غ͞ΕΔ
w ͜͜ʹσΠϒͷใҰͳ͍
)VNBO$POUSPM6*γʔϯ w ϓϨΠϠʔ σΠϒ ͕͍Δ w Ծίϯτϩʔϥ͜͜ w ୯ମͰಈ͔ͤΔ w
3PPNͱ͜ͷγʔϯΛॏͶΔͱɺ෦ ୯ҐͰಈ࡞֬ೝͰ͖Δ w γʔϯՃ͚ͩͳͷͰσβΠφ୯ମ Ͱ࡞ۀ͍͢͠
.BJO(BNFγʔϯ w ࣮ࡍͷήʔϜϑϩʔΛཧ͢Δ w ήʔϜͷΠϕϯτਐߦཧ w ෦ͷಈతಡΈࠐΈɺΓସ͑ w #(.͜͜ w
.BJO(BNF͕࠷ॳʹಡΈࠐ·Εɺॳ ظԽॲཧͰ)VNBO$POUSPM6*ɺ3PPN ΛՃ͍ͯ͘͠ ը૾͕ͳ͍ͨΊՄѪ͍ೣΛ͓ૹΓ͍ͯ͠·͢
ׂͬͯΈͯͷॴײ w࡞ͬͨγʔϯΛͦͷ··͑ΔͷͰײతʹ࿔Γ͍͢ wσβΠφ͕ಈ͖͍͢ɺۀ͕ḿΔ wಈ࡞֬ೝ࣌ʹεΫϦϓτΛ͍͡ΔͷΊͯγʔϯՃ͚ͩͳͷָ͕ wڊେͳ1SFGBCΛ࡞Δ͘Β͍ͳΒ4DFOFʹͯ͠͠·ͬͨํ͕ѻ͍ͦ͢͏ wͨͩɺ(6*ͩͱγʔϯؒͰΦϒδΣΫτͷࢀরͰ͖ͳ͍ͷҙ
Ϛϧνγʔϯͷ׆༻ࣄྫJOϦϏϯάσΠϒ w(6*ͰͷϚϧνγʔϯΤσΟοτͷ׆༻ wεΫϦϓτͰͷ4DFOF.BOBHFSͷ׆༻
ϦϏϯάσΠϒ wσΠϒΛૢ࡞ͯ͠ձ͔ࣾΒୀۈ͢ΔΞΫγϣϯήʔϜ wୀۈ͢ΔͨΊʹࡾͭͷΩʔΞΠςϜΛೖख͍ͯ͘͠ wΩʔΞΠςϜΛೖखͯ͠ग़ޱʹ͔͑ΫϦΞʔ wࣾһʹั·Δͱઆಘ ߈ܸ ͞ΕͯμϝʔδΛड͚Δ wϓϨΠ͢Δͨͼʹ෦ͷߏ͕มԽ͢Δ wϓϨΠͷํʹΑ༷ͬͯʑͳশ߸ΛऔಘͰ͖ɺୀۈྗ$ʙ4ͰධՁ͞ΕΔ w࣮ࡏ͢Δاۀͱͷؔ࿈Ұ͋Γ·ͤΜ
෦ͷࣗಈੜ
ࣗಈੜͷͬ͘͟Γͱ༷ͨ͠ w෦ 4DFOF ͕ҙͷ͚ͩϥϯμϜʹબΕΔ w෦ಉ࢜ɺຖճϥϯμϜʹυΞͰܨ͕͍ͬͯΔ wυΞΛௐΔͱɺผͷ෦ʹΓସΘΔ wඞͣશ෦ͷ෦ʹೖΕΔΑ͏ʹɺ͍͍ײ͡ʹܨ͕͍ͬͯΔ ༻͢Δ෦ͷબ ෦ͷΓସ͑ ࠓճҎԼͷೋʹ͍ͭͯ͢
༻͢Δ෦ͷબ #"% wͱΓ͋͑ͣ෦γʔϯΛҙͷϥϯμϜʹϩʔυͯ͠Έͨ wϋʔυϞʔυͩͱ෦͘Β͍ϩʔυ͞ΕΔ w࣮ػ͕ͩΜͩΜͱԹ͔͘ͳΔ wJ1IPOFͰGQTͱ͍͏είΞΛୟ͖ग़͢ େྔͷγʔϯΛಡΈࠐΉͷݱ࣮తͰͳ͍ͷͰɺ γʔϯΛಡ·ͣʹ෦Λબ͢Δඞཁ͕͋Δ
෦ใͷΓग़͠ 3PPN1SPQFSUZ w෦ͷใΛ4DSJQUBCMF0CKFDUʹ͢Δɻ w෦໊ɺ෦ͷछྨɺυΞͷɺΞΠςϜͳͲ wϑΝΠϧ໊γʔϯ໊ w3FTPVSDFT-PBE"MMͰ·ͱΊͯऔΕΔ w͋ͱϥϯμϜʹબྑ͍ var properties =
Resources.LoadAll<RoomProperty>("Rooms").ToList();
͋Δఔϧʔϧ͚ͨϥϯμϜ wશͳϥϯμϜσβΠϯ͕ݫ͍͠ w෦ʹଐੑΛ͚ͭΔ wඞਢͳ෦ɺඞਢͰͳ͍෦ w)VC &WFOUҎ֎̍ݸ͚ͩඞਢ w)VC̍ݸҎ্ w&WFOǓݸҎ্ public enum
RoomType { Start, // ։࢝ Locker, // ϩοΧʔϧʔϜ Timecard, // λΠϜΧʔυ෦ President, // ࣾࣨ Exit, // ඇৗޱ Goal, // ΰʔϧ Hub, // ଓ෦ (υΞ3ʙ4ͭ) Event // Πϕϯτ෦ }
༻͢Δ෦ͷબ ؆ུԽͨ͠ͷ 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(); }
෦ͷΓସ͑ɺͷલʹ෦ͷใΛ࣋ͭΫϥε w3PPN1SPQFSUZͰ෦ใఆٛͰ͖ͨ wࠓɺήʔϜಈ࡞தͷใ͕ඞཁʹͳΔ wͲ͜ͱܨ͕͍ͬͯΔʁͲͷΞΠςϜΛௐΒΕͨʁͳͲ w3PPN1SPQFSUZΛϕʔεʹΠϯελϯεΛ࡞ΔΠϝʔδ
෦ͱυΞͷΫϥεఆٛ #"% public class RoomBehaviour : MonoBehaviour { // ෦ใ
public RoomProperty roomProperty; // ෦ʹ͋ΔυΞୡ public List<DoorBehaviour> doors; } public class DoorBehaviour : MonoBehaviour { // ܨ͕͍ͬͯΔυΞ public DoorBehaviour target; }
෦ͱυΞͷΫϥεఆٛ #"% w(BNF0CKFDUʹଓใΛ࣋ͨͤΔͱ·͍ͣ w෦γʔϯϑΝΠϧͰɺසൟʹআ͞ΕΔ wγʔϯআ࣌ʹଓใ͝ͱফ͞ΕΔ wΞΠςϜใγʔϯ࠶ಡΈࠐΈ࣌ʹݩ௨Γ ଓใ(BNF0CKFDUʹґଘ͍͚ͯ͠ͳ͍ɻ σʔλͱ(BNF0CKFDUΛΓ͢ඞཁ͕͋Δ
σʔλΫϥεͱ#FIBWJPVSʹ͚Δ public class Room { private RoomProperty roomProperty; public List<Door>
doors; public List<Item> items; } public class Door { private Room parentRoom; public Door target; }
σʔλΫϥεͱ#FIBWJPVSʹ͚Δ public class RoomBehaviour : MonoBehaviour { public Room roomData;
public List<DoorBehaviour> doors; public List<ItemBoxBehaviour> itemBoxes; } public class DoorBehaviour : MonoBehaviour { public Door doorData; }
σʔλΫϥεͱ#FIBWJPVSʹ͚Δ w3PPN෦ͷݱࡏͷঢ়گ υΞɺΞΠςϜ Λ࣋ͭ w%PPSଓઌͷ%PPSΛ࣋ͭ wγʔϯ্ʹ3PPN#FIBWJPVS͕ҰͭɺυΞͦΕͧΕ%PPS#FIBWJPVSΛ࣋ͭ w͜ΕΒΒͬͨใΛجʹҠಈॲཧΞΠςϜऔಘॲཧΛߦ͏͚ͩ w෦ΛಡΈࠐΉλΠϛϯάͰ#FIBWJPVSʹσʔλΛͯ͋͛͠Δ
γʔϯΛϩʔυ͢Δʹݱࡏͷ෦ใΛ͢ .BJO(BNF )VNBO$POUSPM6* 3PPN 3PPN#FIBWJPVS 3PPN %PPS#FIBWJPVS %PPS#FIBWJPVS
෦ͷΓସ͑ wͬ͘͟Γͱࡾͭͷॲཧ͕Δ ৽͍͠෦ͷಡΈࠐΈ ෦ใͷηοτΞοϓ ݹ͍෦ͷআ
Γସ͑ॲཧ ؆ུԽ 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); }
Γସ͑ॲཧ ؆ུԽ 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); } ৽͍͠෦ΛಡΈࠐΉ
Γସ͑ॲཧ ؆ུԽ 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); } ෦ʹݱࡏͷใΛ༩͑Δ
Γସ͑ॲཧ ؆ུԽ 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); } ݹ͍෦ͷআ
γʔϯͷΓସ͑ wϩʔυͨ͠γʔϯͷத͔Βҙͷ$PNQPOFOUΛऔΔͷ͕໘ w4DFOF(FU3PPU(BNF0CKFDUTͰώΤϥϧΩʔԼͷ(BNF0CKFDUऔΕΔ wSPPUΦϒδΣΫτ࡞ͬͯͦ͜ʹཧεΫϦϓτஔ͘ͷָ͕ͦ͏ wσΠϒSPPUʹ3PPN#FIBWJPVSΛ͚ͭͯɺ͔ͦ͜Β෦ͱΓऔΓ͢Δ
-PBE4DFOF"TZODͷҙ wίʔϧόοΫ͕ݺΕΔλΠϛϯάɺγʔϯͷಡΈࠐΈ͕ྃͨ࣌͠ wTDFOFͷΦϒδΣΫτ͕ॳظԽ͞Ε͍ͯΔอূͳ͍ w4UBSUʹॳظԽॲཧॻ͍ͯͨΒҙ wϑϨʔϜͬͯॲཧ͢Δͱ࣮֬ wFWFOUͷߪಡղআΕͳ͍Α͏ʹͶʂ
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 => { // ηοτΞοϓӠʑ }); }
εΫϦϓτॻ͍ͯͷॴײ wಛผࡶʹͳΔ͜ͱͳ͔ͬͨ wඇಉظͰॲཧ͍͚ͯ͠Δͷخ͍͠ wମײతʹɺ1SFGBCΛJOTUBOUJBUF͢ΔΑΓएׯ͍ʁ wγʔϯؒͷܨ͗͜Έॲཧ͕ඞਢʹͳͬͯ͘Δ
ϚϧνγʔϯΤσΟοτ׆༻ͷ·ͱΊ wׂ͝ͱʹγʔϯΛΓ͚ΕΔ͔Βۀ͕Γ͍͢ w୯ମγʔϯ 1SFGBCΑΓௐ࣌ͷख͕͔͔ؒΒͳ͍ wطଘγʔϯʹӨڹΛ༩͑ͳ͍ͷͰϝϯλϧʹ༏͍͠ wܨ͗͜ΈͷΈ࣮͢Δඞཁ͕͋Δ w૯ͯ͡ɺඇϓϩάϥϚͷޮΛ্͛Δͷʹ༗ޮ
࠷ޙʹ ͜Μͳ1SFGBCγʔϯʹͯ͠ྑ͍ͷͰͳ͍͔ʁͱ͍͏ײ w ෳͷผͷ(BNF0CKFDU͕ࠞͬͯ͟Δ w (6*Ͱͷฤू࡞ۀ͕ଟ͍ w ̍ՕॴͰ͔ͬͯ͠ͳ͍ w ୯ମͰػೳ͢Δ
֎෦ͷΦϒδΣΫτʹґଘ͠ͳ͍ σΠϒͷྫɿ w ෦κϯϏɾΞΠςϜɾصͳͲ͍ͬͺ͍͋Δ w ෦ͷஔͳͲසൟʹߋ৽͢Δ w ͭ࠶ར༻͢Δ͜ͱͳ͍ దʹΓ͚ͯͤʹ։ൃ͍ͨ͠
͓ΘΓ