ããã«ã¡ã¯ãHabrïŒ ãã®ãããã¯ã§ã¯ãlibGDXã²ãŒã ãšã³ãžã³ã®å°è±¡ãå ±æããæ®éã®ã€ã³ãã£ãŒããããããŒã®æ¥åžžç掻ã«ã€ããŠè©±ãããªãã£ã¹å¥Žé·ããã®èªç±æéã§éå»æ°ãæéè¡ã£ãŠããã²ãŒã ã®ç§å¯ã®ããŒã«ãéããããšæããŸãã ãããã®ã¡ã¢ãlibGDXã§äœããå§ããã°ããã®äººããã倢ã®ã²ãŒã ãã®ãšã³ãžã³ãéžæãã人ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãããŠãç«ãããããªããã igrostroyãšã¯ãŸã£ããé¢ä¿ãããŸããã ç§ã¯åæã«æãããšãåŠãã§ããŸãïŒåŠã¶ããšãè©Šã¿ãŠããŸãïŒãããŠä»ãç§ã®ãããã®ãã¬ãŒãã³ã°ç«ã¯ã©ãã«ã§ããããŸãïŒ ããŒãã¡ãŒã誰ãã«èŠããããšãèŠæ±ããŸãã
æç»
æç»ãšããã°ã ãã¡ãããããã©ã³ã®CGã¢ãŒãã£ã¹ãã¯ç§ã«ã¹ãªãããæããŸãïŒãããŠã圌ãã¯çµ¶å¯Ÿã«æ£ããã§ãããïŒããç§ã¯ããã»ã¹ããã©ã®ããã«ç«ã¡éããŸããïŒ çµµããããªã«ã¯ãŒã«ã ãšã¯æããŸããã§ããïŒ æããã¹ãŠã®ãŽãã®äžã§ãç§ã¯ã°ã©ãã£ãã¯ã¿ãã¬ããããã¬ãŒã³ãããŠããŸããã 竹ã¯ããã«ãããã®ã§ããç§ã¯èª°ããåãããµãããããšãè²·ã£ãŠãããšæããŸãã ããããããã€ãŠãããŒã¯ãã¹ã©ãŒã®ã30æ¥ã§æãããšãã§ããããšããæ¬ã«ç®ãè¡ããŸããã ãããããã¡ããã30æ¥éã§æãããšãåŠã¶ããšã¯ãC ++ãåæã«åŠã¶ããšãšåãã§ãã 誰ãããããç解ããŠããŸãã ããããçµµã¯ããã«ããç¡åœ¢ã®æèœã§ã¯ãªããæªç¥ã®å³¶ã®ç§èå°ã§ãŠãã³ãŒã³ãé£ã¹ãŠãããšã«ãã§ã¯ãããŸããã ããã¯ãããã°ã©ãã³ã°èšèªã®æ§æãšåããããåçŽãªã«ãŒã«ã®ã»ããã§ãã ãã¡ãããçµéšãïŒ ã¹ã¿ããã£ã³ã°ã ããããåªããããã°ã©ããŒãåæ§ã®æ¹æ³ã§éçºããåé¡ã解決ãããã¿ãŒã³ããã¯ãããžãŒãç 究ããããããçš®é¡ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸããŸãã
ãããã£ãŠããã®æ¬ïŒããæ£ç¢ºã«ã¯ãæ¬ã§ã¯ãŸã£ããæ·±å»ã§ã¯ãããŸããïŒã«ã¯ãã¹ãã£ãã¯ã¹ãã£ãã¯ãã¥ãŠãªä»¥äžã®ãã®ãæãããã®åºæ¬çãªã«ãŒã«ããã¹ãŠãããŸãã ãããŠãææãã®æ³¢ç·ãå°ãªããšãããªãã«ææãåŒãèµ·ãããªããªããšãããã¯ã¯ãŒã«ã§ãïŒ ããã»ã¹èªäœãåã³ãããããå§ããŸãã ç§å人ã«ãšã£ãŠãããã¯å瀺ã§ããã
ãŸãããã®æ©äŒãå©çšããŠãåªãããšãã£ã¿ãŒã§ããSketchBook Proã«ã¢ããã€ã¹ãããããšæããŸãã ããã«ã¯ãããæãããŠããŸãããããã¯ãŸãã«éå°é家ãå¿ èŠãšããŠãããã®ã§ãã ãŠãŒã¶ãŒãã¬ã³ããªãŒã§ãæ©èœãå€ãããŸããã ã©ã€ã»ã³ã¹ã¯ãPhotoshopãšã¯ç°ãªããæ¯èŒçå®äŸ¡ã§ãã ãã®äžå¿«ãªããµãã¹ã¯ãªãã·ã§ã³ãœãããŠã§ã¢ãã¹ããŒã ã¯ããã§é©çšãããŸãããåºæ¬çãªæ©èœã¯ç¡æã§å©çšã§ããŸãã
éçãããŒã«ãã³ããã©ã·ã®3ã€ã®ããŒã«ã®ã¿ã䜿çšããŠããŸãã æ£ããåŒã³åºãæ¹æ³ãããããªãã®ã§ãå€åºå ã§ã«ãŒãããŸã£ããã«ããæ©èœã¯éåžžã«äŸ¿å©ã§ãã ãã³ãçæã§æã¡ãããçæ¹ã®æã§ãã³ãæã¡ïŒãã£ã³ãã¹ã®å転ãšã¹ã±ãŒãªã³ã°ïŒãè¡ã£ãŠãã ããïŒ åµé æ§ãåµé ããŸãã
ãªãUnityã§ã¯ãªãã®ã§ããïŒ
ããããæ°ãæ£ããŸããã ã²ãŒã ãšã³ãžã³ã®éžæã«é¢ããŠãæåã«åºãŠããå¯äžã®è³ªåã¯ãããªããŠããã£ã§ã¯ãªãã®ã§ããïŒãã§ãã ãããã£ãŠãïŒ ç§ã¯Android Studioã«æ £ããŠããããïŒæè¿ãäŒæ¥ã¢ããªã±ãŒã·ã§ã³ãäœæããŸããïŒãJava SDKãå€å°ç¥ã£ãŠããŸãã ãããŠãåçŽãª2Dã²ãŒã ã«Unityãªã©ã®å€æ©èœã¢ã³ã¹ã¿ãŒã䜿çšããããšã¯ãå°ãããããéãã§ãããã ãªãã¿ã®ãªãIDEãå¥ã®ã¢ãããŒããåã³ã ãããŠã空ã®ãããžã§ã¯ãã®ãµã€ãºã¯20 MBã§ããïŒ ã¯ããlibGDXã§ã¯ã²ãŒã å šäœãšã°ã©ãã£ãã¯ïŒããã§ã¯ããã»ã©å°ããã¯ãããŸããïŒã®ééã軜ããªã£ãŠããŸãïŒ ç§ãã¡ã¯é«éã€ã³ã¿ãŒãããã®æ代ã«äœãã§ãããšç解ããŠããŸãããããã§ãã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºãšã€ã³ã¹ããŒã«æ°ã®éã«ã¯çžé¢é¢ä¿ããããŸãã
ãã£ãšæ·±ãæãäžãããšããã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºã倧ããããŸããWi-Fiçµç±ã§ã¯ãªãããŠã³ããŒãããŠãããããã§ããïŒããšããèŠåãåºãŸãïŒå®éãèŠããŠããªãããæ¬è³ªã¯ããã§ãïŒã
äžè¬ã«ã以åã«Android SDKãæ±ã£ãããšãããå ŽåãlibGDXã¯ãã¯ãã¹ãã©ãããã©ãŒã éçºãžã®ã¹ã ãŒãºãªç§»è¡ã®ããã®åªããéžæè¢ã§ãã libGDXãåããŠç¥ã£ããšãã«èªåã§åŠãã ãã¹ãŠã®é·æãšçæãå®åŒåããããšããŸãã
é·æ
- ç¡æã§ãã
- ã¯ãã¹ãã©ãããã©ãŒã ã ãã¹ã¯ããããã«ãã¯ãWindowsãšMacã§çããã·ãŒã ã¬ã¹ã«ãã«ãããã³å®è¡ãããŸãïŒLinuxã§ã¯ç¢ºèªããæ¹æ³ããããŸããã§ããããåãæ¹æ³ã§ãããšç¢ºä¿¡ããŠããŸãïŒã HTMLã«ã€ããŠã¯ãã¡ãã£ãšãããã¥ã¢ã³ã¹ã«åºäŒããŸãããè¿œå ãããã¹ãŠã®ããã±ãŒãžã¯ãgwt.xmlã®ã³ã¢ãããžã§ã¯ãã«ç»é²ããå¿
èŠããããŸããç»é²ããªããšããã«ããããŸããã Androidã«ã¯äœã®åé¡ããããŸãããiOSã¯ä»ã®ãšããç§ã®èšç»ã«ã®ã¿å«ãŸããŠããŸãã
- Androidéçºè ã®äœãšã³ããªãŒãããå€ã åãã¹ã¿ãžãªãåãGradleã ãã¹ãŠã®ã²ãŒã ããžãã¯ãšAndroidãããžã§ã¯ããèšè¿°ããCoreãããžã§ã¯ãããããŸããããã¯ã倧ãŸãã«èšããšãViewãååšããMainActivityã§ããããã®äžã§Coreãããžã§ã¯ããå®è¡ãããŸãã ã³ã¢ãããžã§ã¯ããããAndroidãããžã§ã¯ãã§èšè¿°ãããã©ãããã©ãŒã äŸåéšåãç°¡åã«åŒã³åºãããšãã§ããŸãã ãããŠéåžžã«çŽ æŽãããããšã¯ãGoogleã®ãã¥ãŒããªã¢ã«ããçŽæ¥ãã©ãããã©ãŒã ã³ãŒãïŒåºåãåæãã²ãŒã ãµãŒãã¹ïŒãå®è£ ããããšã§ãã éåžžã®ã¢ããªã±ãŒã·ã§ã³ã®ããã«ã ã€ãŸããã©ã€ãã©ãªããµãŒãããŒãã£ã®æ¡åŒµæ©èœãªã©ã¯ãããŸããïŒ
çæ
- é¢é£ãããè³¢æãªãã¥ãŒããªã¢ã«ã¯èŠã€ãããŸããã§ããã ããã§ãHabréã«ã¯å€ãã®æ å ±ããããŸãããéåžžã¯ç»é¢ã«ã¹ãã©ã€ãã衚瀺ããæ¹æ³ã«åž°çããŸãã å®éã«ã¯ãããã¯å¿ èŠãããŸããããªãã§ããïŒ ããé«ãã¬ãã«ã®æœè±¡åã䜿çšããæ¹ãè³¢æã§ãïŒActorãSceneïŒããã«ã€ããŠã¯ä»¥äžã§è©³ãã説æããŸãïŒã æ°ãããšã³ãžã³ã«æ £ãããšããã¯ã€ãã¯ã¹ã¿ãŒãã¬ã€ãã§ã¯ãããŸããŸãªç»é¢ã«åãããŠã²ãŒã ãæ£ããã¹ã±ãŒãªã³ã°ããããªãœãŒã¹ã®ããã¯ã°ã©ãŠã³ãããŒãïŒããã¯ãã¹ãŠè¯ãã§ã ïŒãç»é¢/ã·ãŒã³ããã³ãããã®ãªããžã§ã¯ãã®ç®¡çãåç §ããŠãã ããã
çæã«ã€ããŠã®äŒè©±ãç¶ãããšãlibGDXã«å°ãæ§ãããªæããããŸãã ããã«ã¯åªããæœè±¡åããããŸãïŒã¹ã¯ãªãŒã³-ã²ãŒã ç»é¢ãã¹ããŒãž-ã·ãŒã³ãŸãã¯ã¬ã€ã€ãŒãã¢ã¯ã¿ãŒ-ãã®ã·ãŒã³äžã®ãªããžã§ã¯ãã ç§ã®ã²ãŒã ã§ã¯ãã¬ãã«ãã¡ãã¥ãŒãªã©ããã¹ãŠã®ã²ãŒã ç»é¢ã«1ã€ã®ç»é¢ãšå€ãã®ã¹ããŒãžãäœæããããšã«ããŸããã Actorããã²ãŒã ãªããžã§ã¯ããç¶æ¿ãã stage.addActorïŒããŒã«ïŒãå®è¡ããã ãã§ãã 次ã®ã¹ããŒãžã§ã¯ãã¬ã³ããªã³ã°ã移åãªã©ãè¡ã£ãŠããŸãã ãã®ãªããžã§ã¯ãã ãããã£ãŠãã¢ã¯ã¿ãŒèªäœã¯äœãããŸããã ã¹ãã©ã€ãã¯è¡šç€ºãããïŒã²ãŒã ãªããžã§ã¯ãã®99ïŒ ã¯ã¹ãã©ã€ãã§ãïŒã2ã€ã®ã¢ã¯ã¿ãŒéã®è¡çªããã§ãã¯ããããšã¯ã§ããŸãããäžè¬çã«ã¯äœããããŸããïŒ
ç¬èªã®SimpleActorãäœæããããããã²ãŒã ãªããžã§ã¯ããæ¢ã«ç¶æ¿ããå¿ èŠããããŸãã
ã³ãŒã
public class SimpleActor extends Actor { private final TextureRegion region; public SimpleActor(TextureRegion region) { this.region = region; setSize(region.getRegionWidth(), region.getRegionHeight()); setBounds(0, 0, getWidth(), getHeight()); } @Override public void draw(Batch batch, float parentAlpha) { batch.draw(region, getX(), getY(), getOriginX(), getOriginY(), getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation()); } }
ã¢ãã¡ãŒã·ã§ã³åãããã²ãŒã ãªããžã§ã¯ããå¿ èŠãªå ŽåïŒããã§ãªãå Žåãã©ãã«ãããŸããïŒïŒ
ã³ãŒã
public class SimpleAnimatedActor extends Actor { private Animation animation; private TextureRegion currentFrame; private float stateTime; private boolean started; public SimpleAnimatedActor(float frameDuration, Array<TextureRegion> frames) { animation = new Animation(frameDuration, frames); currentFrame = animation.getKeyFrame(stateTime); setBorders(frames.get(0)); } private void setBorders(TextureRegion sample) { setSize(sample.getRegionWidth(), sample.getRegionHeight()); setBounds(0, 0, getWidth(), getHeight()); } public void start() { stateTime = 0; started = true; } public boolean isFinished() { return animation.isAnimationFinished(stateTime); } @Override public void act(float delta) { super.act(delta); if (!started) { return; } stateTime += delta; currentFrame = animation.getKeyFrame(stateTime); } @Override public void draw(Batch batch, float parentAlpha) { batch.draw(currentFrame, getX(), getY(), getOriginX(), getOriginY(), getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation()); } }
ããªããã£ããªè¡çªãã§ãã¯ãå®è£ ããããã«ãSimpleActorã«Polygonãè¿œå ã§ããŸãïŒ
ã³ãŒã
Polygon polygon = new Polygon(new float[]{0, 0, getWidth(), 0, getWidth(), getHeight(), 0, getHeight()}); polygon.setPosition(getX(), getY()); polygon.setOrigin(getOriginX(), getOriginY()); polygon.setScale(getScaleX(), getScaleY()); polygon.setRotation(getRotation());
ãªã©ãªã©ã ãã¡ãããããã¯ç¹å®ã®å°é£ãåŒãèµ·ãããŸããã ããã§ãããªããšã³ãžã³ã§åæ§ã®ããšãããªãã®ãç解ã§ããŸãããïŒ ãã®ãããè¿œå ããã³ãŒãããããžã§ã¯ããããããžã§ã¯ãã«ãã©ãã°ããå¿ èŠããããŸãã
ãã©ã°ã¡ã³ããŒã·ã§ã³
Androidããã€ã¹ã®åç©åå šäœã§ã²ãŒã ãåçã«ã¯ãŒã«ã«èŠããããã«ã¯ã©ãããã°ããã§ããïŒ ç§ã«ãšã£ãŠãããã¯éèŠãªåé¡ã®1ã€ã§ãã ãããã£ãŠãlibGDXã§ç»åãã¹ã±ãŒãªã³ã°ããåé¡ãã©ã®ããã«è§£æ±ºãããã詳ãã説æããŸãã
ã¿ãã¬ããã§ã¯ããå€ãã®ç°å¢ã衚瀺ãïŒ4ïŒ3ïŒãã¹ããŒããã©ã³ã§ã¯ããå°ãªãç°å¢ã衚瀺ããïŒ16ïŒ9ïŒãšããç§ã¯ãã§ã«å€å žçãªã¢ãããŒãã奜ãã§ãã ãã®å Žåãã©ãã«ãåŒã䌞ã°ããããã®ã¯ãªããã²ãŒã ãªããžã§ã¯ãã¯ãµã€ãºãå€æŽããªããšèšãããŸãã ãã¹ãŠã®ã°ã©ãã£ãã¯ã1ã€ã®è§£å床ã§ä¿åããŸãã960x1280ïŒ4ïŒ3ïŒã§ãã ç»é¢ã®äžå€®ã«ã¯ããã¬ãŒã€ãŒãæäœãããã¹ãŠã®ãªããžã§ã¯ããå ¥ãå¿ èŠããããã²ãŒã é åã720x1280ïŒ16ïŒ9ïŒããããæ®ãã¯ç¹å®ã®ããã€ã¹ã«å¿ããŠé¢šæ¯ã§ãããã«ããã§ããŸãã ãã®ååã説æããæãç°¡åãªæ¹æ³ã¯ãåçã䜿çšããããšã§ãã
LibGDXã¯ããã®ããã®ãã¹ãŠã®æ©èœãæäŸããŸãã å¯äžã®æ³šæç¹-äžéšã®ãªããžã§ã¯ãã¯ç»é¢ã®ç«¯ã«åãä»ããå¿ èŠããããŸãã äžã®ç»åã®[ããŒã ]ãã¿ã³ã®ããã«ã ãããè¡ãã«ã¯ãã²ãŒã 座æšã§ç»é¢ã®å®éã®å·Šç«¯ãšå³ç«¯ãç¥ãå¿ èŠããããŸãïŒäžãšäžãç°¡åã«ãªããŸã-ããããåžžã«1280ãš0ã§ãïŒã ããã€ãã®ã³ãŒããæžããŸãããïŒ
ã³ãŒã
public class MyGame extends Game { public static final float SCREEN_WIDTH = 960f; public static final float SCREEN_HEIGHT = 1280f; public static float VIEWPORT_LEFT; public static float VIEWPORT_RIGHT; private GameScreen mGameScreen; @Override public void create() { mGameScreen = new GameScreen(); setScreen(mGameScreen); } @Override public void resize(int width, int height) { super.resize(width, height); float aspectRatio = (float) width / height; float viewportWidth = SCREEN_HEIGHT * aspectRatio; VIEWPORT_LEFT = (SCREEN_WIDTH - viewportWidth) / 2; VIEWPORT_RIGHT = VIEWPORT_LEFT + viewportWidth; } @Override public void dispose() { super.dispose(); mGameScreen.dispose(); } }
ããã§äœãèµ·ãã£ãŠããŸããïŒ ããã¯ãGameããç¶æ¿ããã²ãŒã ã®ã¡ã€ã³ã¯ã©ã¹ã§ãã ããã§ScreenïŒç§ã®å Žåã¯ç»é¢ã®ã¿ïŒãäœæããã³èšå®ãã resizeïŒïŒããªãŒããŒã©ã€ãããŸãã ãã®Androidã®ã€ãã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ããªã¬ãŒãããŸããããã§ãç»åã®å·Šç«¯ãšå³ç«¯ãèšç®ã§ããŸãïŒVIEWPORT_LEFTããã³VIEWPORT_RIGHTïŒã
GameScreenã§ã¯ã FillViewportãã€ã³ã¹ããŒã«ããå¿ èŠããããŸããã¢ã¹ãã¯ãæ¯ãã¿ãŒã²ãããšäžèŽããªãå Žåãç»åã確å®ã«ããªãã³ã°ãããããã«ããã®ã¯ã圌ã§ãã ãã¥ãŒããŒãã¯ãã²ãŒã ã®äžçãžã®çªå£ã§ãã ãããã¯ããã€ãã®ã¿ã€ãããããããã«é¢ããããã¥ã¡ã³ãã¯ç§ãããããã«ãããããããã³ãŒããæäŸããŸãïŒ
ã³ãŒã
public class GameScreen implements Screen { private final OrthographicCamera mCamera; private final Viewport mViewport; private final AssetManager mAssetManager; private Stage mActiveStage; public GameScreen() { mCamera = new OrthographicCamera(); mViewport = new FillViewport(MyGame.SCREEN_WIDTH, MyGame.SCREEN_HEIGHT, mCamera); mAssetManager = new AssetManager(); mActiveStage = new MyStage(mViewport, mAssetManager); } @Override public void render(float delta) { mCamera.update(); Gdx.gl.glClearColor(65 / 255f, 65 / 255f, 65 / 255f, 1f); // Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); mActiveStage.act(delta); mActiveStage.draw(); } @Override public void resize(int width, int height) { mViewport.update(width, height, true); } @Override public void dispose() { mActiveStage.dispose(); mAssetManager.dispose(); } }
ããã§ã¯ãäžè¬ã«ããã¹ãŠãçŽæçã«æ確ã§ããå¿ èŠããããŸããresizeïŒïŒã䜿çšããŠmViewport.updateïŒwidthãheightãtrueïŒãå®è¡ããããšãå¿ããªãã§ãã ããã
ã¡ã«ãã«ã«ããã¯ã¹
ãšã³ãžã³ã«ã€ããŠç°¡åã«èª¬æããã®ã§ãã²ãŒã èªäœã«ã€ããŠããå°ãèšããããšæããŸãã ç§ã¯1幎éã²ãŒã ããã¬ã€ããŠããŸããããäŒæ¥ã®æ²Œå°ã¯ã»ãšãã©ç§ãåžããŸããã ããããããã¯ç§ã倢ãèŠãããšãæ¢ããŸããã§ããã ã¯ãšã¹ãã®å€¢ãå¯èœãªéãè€éãªããºã«ã ãéãä»ã®ããªãŒãã¬ã€ã®æããªããšã®æããããªãã
ãããã£ãŠãã¡ã«ãã«ã«ããã¯ã¹ã®ã¢ã€ãã¢ã¯ãå éšã«ãããã®ã確å®ã«ä¿è·ãããšãã1ã€ã®ç®çã§äœæãããããã€ã¹ã§ãã ä¿è·ã®åã¬ã€ã€ãŒã¯ãæ°ããã²ãŒã ã¡ã«ããºã ãåããåå¥ã®ç¬ç«ããããºã«ã§ãã
巚倧ãªãã©ã¹ã®ã€ã³ãã£ãŒãºãç§ãã¡ã¯ç§ãã¡ãæãããšãããäœè£ããããŸãã ä¿æçããã®ä»ã®ããŒã±ãã£ã³ã°ã«ã€ããŠã¯æ°ã«ããŸããã ã¯ãããã¹ãŠã®ã³ããŒã·ã£ã«ã¹ã¿ãžãªã®gamediseã¯ããã¬ã€ã€ãŒã®å²åãæåã®ã¬ãã«ã§åããªããªãã®ãèŠãŠããèªåèªèº«ãæã¡ãŸãïŒ ãããŠãèªåã§ãã¬ã€ãããã²ãŒã ãäœãããšãã§ããŸãã
äžè¬çã«ãä»å¹Žã®8æã«ç§ã¯Boxã®å»ºèšãå§ããŸããã å°ãæããã®ã§ãç§ã¯ãã®ãããªããªã¥ãŒã ãåŒãåºãããšãã§ããªãããšã«æ°ã¥ããŸããããããŠãç§ã®èžè¡ã¯å質ã§ç§ã«åããŸããã§ããã æ§ããã«èšã£ãŠãã圌ã¯ç¬ç¹ã§ãã ãã®çµæãgamedev.ruã§ãã®åéºã«åå ããããšã«åæããã¢ãŒãã£ã¹ããèŠã€ãããŸããã é©ããããšã«ããŠã©ãžããŒã«ãšç§ã¯åãéœåžã ãã§ãªããè¿é£ã®éãã«ãäœãã§ããããšãããããŸããã Mechanical Boxã«é©åãªå€èŠ³ãäžããã®ã¯åœŒã§ããã ç§ã¯ããããã©ãã ã£ããããšããããã©ããªã£ããããèšå¿µåãšããŠãä¿æããŸããã éãã¯æããã ãšæããŸãã
ç§ã¯ã¡ã«ãã«ã«ããã¯ã¹ã®äœæ¥ãç¶ããŠããŸããããã®ã¢ã€ãã¢ã®éçºã«ã€ããŠããã€ãã®èãããããŸãã ããªãã®åŒ·ãããã¹ãããããšã«ããå Žåãã²ãŒã ã¯æ¢ã«Google Playã§å ¬éãããŠããŸãã ããäžåºŠUFOã®æ³šç®ãéããªãããã«ããªã³ã¯ã¯æäŸããŸãã ã ãŸããBoxã¯äººæ°ã®ãã1ã€ã®ãªãœãŒã¹ã§ããã«ããŒãã«å解ãããŸãããããã®ããºã«ã¯éåžžã«æ·±å»ãªèª²é¡ã§ãã å人çã«ãç§ãåã°ããŸãã ããªããè¡ãè©°ãŸããšãããŸã§äºæž¬ããããšããã§ããŸãã ããã¯ãã¯ã¬ãŒã³ã®ããã¬ãã«ïŒãã®ããŸããŸããçªãå³ã«åããæ¹æ³ïŒããŸãã¯3ã€ã®ãã«ãã«ã©ãŒã®æ£æ¹åœ¢ïŒãã®è¬ã¯ç°¡åã«æããŸãããçµ±èšã¯é åºãªãã®ã§ãïŒã ãŸãã¯ãã倱ããããŒãã®ã¯ã©ãããžãããã-ããŠãããã¯ãšãªãŒãã§ãã
èªãã§ãããŠã質åããŠãã³ã¡ã³ããæžããŠãããŠããããšãïŒ
è¯ãããšãããŠæ°Žã«æããŠãã ããã