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
550
Unityテスト活動のふりかえり
adarapata
1
570
Gather.townはいいぞ その後
adarapata
1
1.6k
Unityでの開発事例
adarapata
3
22k
どこのご家庭にもあるシーンマネージャーの話
adarapata
1
8.1k
Gather.townはいいぞ
adarapata
2
2.4k
宴はいいぞ
adarapata
0
1.5k
わかった気になるモブプログラミング
adarapata
1
120
モブワークっぽいのをやっている話/Trying mobwork
adarapata
2
1.3k
Other Decks in Programming
See All in Programming
物語を動かす行動"量" #エンジニアニメ
konifar
14
5.3k
コーディングは技術者(エンジニア)の嗜みでして / Learning the System Development Mindset from Rock Lady
mackey0225
2
530
一人でAIプロダクトを作るための工夫 〜技術選定・開発プロセス編〜 / I want AI to work harder
rkaga
12
2.7k
GUI操作LLMの最新動向: UI-TARSと関連論文紹介
kfujikawa
0
980
ワープロって実は計算機で
pepepper
2
1.4k
DynamoDBは怖くない!〜テーブル設計の勘所とテスト戦略〜
hyamazaki
1
200
decksh - a little language for decks
ajstarks
4
21k
Google I/O recap web編 大分Web祭り2025
kponda
0
2.9k
コンテキストエンジニアリングで変わるAI活用 リファクタリングワークフローの実践から学んだ形式知
leveragestech
0
100
A Gopher's Guide to Vibe Coding
danicat
0
170
CLI ツールを Go ライブラリ として再実装する理由 / Why reimplement a CLI tool as a Go library
ktr_0731
3
1.1k
Flutterと Vibe Coding で個人開発!
hyshu
1
260
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
RailsConf 2023
tenderlove
30
1.2k
It's Worth the Effort
3n
187
28k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
470
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Agile that works and the tools we love
rasmusluckow
329
21k
Docker and Python
trallard
45
3.5k
Scaling GitHub
holman
462
140k
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 ͭ࠶ར༻͢Δ͜ͱͳ͍ దʹΓ͚ͯͤʹ։ൃ͍ͨ͠
͓ΘΓ