å€ãã®ã²ãŒã ã¢ããªã±ãŒã·ã§ã³ãç¹ã«ã¢ãã€ã«ããã€ã¹ã®å°ããªç»é¢ã§äœæ¥ããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¡ã€ã³ã³ã³ãã³ãã衚瀺ããããã«èšèšãããç»é¢ã®éšåãæ倧åããããã«ãã³ã³ãããŒã«ãå ããé¢ç©ãæžããããšãéåžžã«éèŠã§ãã ãããè¡ãã«ã¯ãããŸããŸãªçµã¿åããã®ãžã§ã¹ãã£ãåŠçããããã«ã¿ããã¿ãŒã²ãããæ§æã§ããŸãã ãããã£ãŠãç»é¢äžã®ã¿ããã¿ãŒã²ããã®æ°ã¯æå°éã«æããããŸãã ããšãã°ã2ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®ãã¡ã1ã€ã¯éãæã¡ããã1ã€ã¯å転ããããã®ã1ã€ã«çœ®ãæããããšãã§ããŸããããã«ããã1åã®é£ç¶ã¿ããã§äž¡æ¹ã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãã
ãã®èšäºã§ã¯ãã¿ããã¿ãŒã²ããã䜿çšããŠæåã®äººã®ã³ã³ãããŒã©ãŒãå¶åŸ¡ããã·ãŒã³ãèšå®ããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãŸããã³ã³ãããŒã©ãŒã®åºæ¬äœçœ®ãšå転ã®ã¿ããã¿ãŒã²ãããæ§æããŠããããããã®æ©èœã»ãããå±éããå¿
èŠããããŸãã åŸè
ã¯ãæ°ãããªããžã§ã¯ããè¿œå ããã«æ¢åã®ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãä»ããŠå®çŸã§ããŸãã ããŸããŸãªãžã§ã¹ãã£ã®ã·ãŒã±ã³ã¹ãåŠçããããã®ãã©ãããã©ãŒã ãšããŠãWindows * 8ã§ã®Unity 3Dã®å¹
åºãå¯èœæ§ã瀺ãã·ãŒã³ã玹ä»ããŸãã
Unity * 3Dã®ã·ãŒã³èšå®
ãŸããã·ãŒã³ãã»ããã¢ããããå¿
èŠããããŸãã ãããè¡ãããã«ãAutodesk 3D Studio Max *ãããšã¯ã¹ããŒããããå±±ãšæšãå«ã.fbx圢åŒã®å°åœ¢ãªãœãŒã¹ãUnity * 3Dã«ã€ã³ããŒãããŸãã ã³ã³ãããŒã©ãŒãã©ã³ãã¹ã±ãŒãã®äžå€®ã«é
眮ããŸãã
ã¡ã€ã³ã«ã¡ã©ïŒã³ã³ãããŒã©ãŒã®äžéšïŒã®æ·±åºŠã€ã³ãžã±ãŒã¿ãŒãã¬ãã«-1ã«èšå®ããŸãã çŽäº€æ圱ãå¹
1ããã³é«ã0.5ãããã³ãã©ã°ãã¯ãªã¢ããªãã§ãµããŒãããå¥ã®ã«ã¡ã©ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãäœæããŸãã 次ã«ãGUIWidgetã¬ã€ã€ãŒãäœæããã«ã¡ã©ã€ã³ã¿ãŒãã§ãŒã¹ã®ãã¹ã¯ã«ããŸãã
çŽäº€ã«ã¡ã©ã®èŠéå
ã®ã¹ããŒãžäžã®ã³ã³ãããŒã©ãŒãå¶åŸ¡ããã¡ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãé
眮ããŸãã å·Šæã®åæã«çãè¿œå ããŸãã å°æã®çäœã¯ã³ã³ãããŒã©ãŒãå·Šã«ãè¬æã®çäœ-åæ¹ãäžæ-å³ã«ã人差ãæ-åŸæ¹ã«ç§»åãããŸãã 芪æçã䜿çšãããšãæèšåãã«30床ã®è§åºŠã§ç圢ã®ã·ã§ã«ããžã£ã³ãããŠèµ·åã§ããŸãã
å³åŽã®ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®å Žåãç«æ¹äœïŒæ£å°åœ±ã®æ£æ¹åœ¢ïŒãäœæããŸãã ãã®ãã¥ãŒãã®ã·ãããžã§ã¹ãã£ãµããŒããèšå®ããMouseLook.csã¹ã¯ãªããã«æ·»ä»ããŸãã ãã®ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã¯ãUltrabookã®ã¿ããããããšåãæ©èœãæäŸããŸãã
ãããã®ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãã¡ã€ã³ã«ã¡ã©ã®èŠéå€ã«é
眮ããGUIWidgetãã¬ã€ã€ãŒãšããŠèšå®ããŸãã å³ 1ã€ã³ã¿ãŒãã§ãŒã¹èŠçŽ ã䜿çšããŠãã·ã§ã«ãèµ·åããã¹ããŒãžäžã®ã³ã³ãããŒã©ãŒã®äœçœ®ãå¶åŸ¡ããæ¹æ³ã確èªã§ããŸãã
å³1.å°åœ¢ãšç圢ã®çºå°äœãçºå°ãããäžäººç§°ã³ã³ãããŒã©ãŒã·ãŒã³ããã®ã·ãŒã³ã§ã¯ãã³ã³ãããŒã©ãŒããçºå°ãããçºå°ç©ãæšãé£ã³ãŸãã ãããä¿®æ£ããã«ã¯ãã°ãªãããŸãã¯ã³ã©ã€ããŒãåããªãŒã«è¿œå ããå¿
èŠããããŸãã ãã®ã·ãŒã³ã®å¥ã®åé¡-äœé-ã¯ãè¬æçã§åæ¹ã«ç§»åããªããã¿ãããããã䜿çšããŠèŠäžããããšãããšçºçããŸãã ãã®åé¡ã解決ããã«ã¯ãé²ããã¿ã³ãæŒããªããèŠäžãããšãã®èŠéè§ãå¶éããŸãã
ãã«ãã¿ãã
ããŒã¹ã¹ããŒãžã«ã¯ãäžå¿ããã®æ¹åã«äžå®ã®è§åºŠã§çºå°äœãçºå°ããäžäººç§°ã³ã³ãããŒã©ãŒããããŸãïŒå³1ãåç
§ïŒã ããã©ã«ãã®è§åºŠã¯æèšåãã«30床ã§ãã
èšå®ãããæéãããé »ç¹ã«å®è¡ãããè€æ°ã®ã¿ããããµããŒãããããã«ã·ãŒã³ãèšå®ããçºå°ç©ã®çºå°è§åºŠãå€æŽããŠãçºå°ç©ãçºå°ããããšããŸãã ãã®å Žåãå·ŠåŽã®èŠªæçã®ã¹ã¯ãªããã§floatåã®å€æ°ã䜿çšããŠãã¿ããã®æ°ã«å¿ããŠè§åºŠãææ°é¢æ°çã«å¢å ããããã«èª¿æŽã§ããŸãã ãããã®å€æ°ã¯ãæåŸã®çºå°äœã®çºå°ä»¥éã®è§åºŠãšæéãå¶åŸ¡ããŸãã
private float timeSinceFire = 0.0f; private float firingAngle = 30.0f;
次ã«ã芪æçã®ã¿ãããµã€ã¯ã«ã0.5ç§ã«1åãããé »ç¹ã«å®è¡ãããå Žåã«çºå°äœã®çºå°è§åºŠãå°ãããªãããã«ã芪æçã®ã¹ã¯ãªããã§æŽæ°ãµã€ã¯ã«ãæ§æããŸãã ã¿ããã0.5ç§ã«1åæªæºçºçããå ŽåããŸãã¯çºå°äœã®çºå°è§åºŠã0床ã«æžå°ããå Žåãçºå°äœã®çºå°è§åºŠã®å€ã¯30床ã«æ»ããŸãã 次ã®ã³ãŒããå€æããŸãã
timeSinceFire += Time.deltaTime; if(timeSinceFire <= 0.5f) { firingAngle += -l.0f; } else { firingAngle = 30.0f; } timeSinceFire = 0.0f; if(firingAngle <= 0) { firingAngle = 30; } projectileSpawnRotation = Quaternion.AngleAxis(firingAngle,CH.transform.up);
ãã®ãããªã³ãŒãã¯ç ²æå¹æãçã¿åºããé£ç¶ããã¿ããã«ããããŸããŸãæžå°ããè§åºŠã§ç ²åŒŸãçºå°ãããŸãïŒå³2ãåç
§ïŒã ãã®å¹æã¯ããŠãŒã¶ãŒãèšå®ããããã²ãŒã ãŸãã¯ã·ãã¥ã¬ãŒã·ã§ã³ã¢ãŒãã§ç¹å®ã®æ¡ä»¶ã«åŸã£ãŠå©çšã§ããããã«ããããšãã§ããŸãã
å³2.ç¶ç¶çãªã¿ããã«ãããã·ã§ã«ã®çºå°æ¹åãå€åããŸãã¹ã¯ããŒã«ãºãŒã
å³ã®ç»é¢ã®å³äžã«æ£æ¹åœ¢ãèšå®ããŸãã 1ã¯ãããŒããŒãã®ã¿ããããã«ãšåæ§ã®ã¢ãŒãã§åäœããŸãã ã·ãããžã§ã¹ãã£ã§ã¯ãæ£æ¹åœ¢ã¯ç§»åããŸããããMouseLookã³ã³ãããŒã©ãŒã¹ã¯ãªããã䜿çšããŠãã·ãŒã³ã®ã¡ã€ã³ã«ã¡ã©ãäžäžå·Šå³ã«å転ãããŸãã åæ§ã«ããºãŒã ãžã§ã¹ãã£ïŒä»ã®ãã©ãããã©ãŒã ã§ã®ã¹ãã¬ãã/å§çž®ãšåæ§ïŒã¯ãæ£æ¹åœ¢ã®ã¹ã±ãŒãªã³ã°ã«ã€ãªãããŸããããã¡ã€ã³ã«ã¡ã©ã®èŠéã®å€åã«ã€ãªãããŸããããã«ããããŠãŒã¶ãŒã¯ã¡ã€ã³ã«ã¡ã©ããºãŒã ã€ã³ãŸãã¯ãºãŒã ã¢ãŠãã§ããŸãïŒå³3ãåç
§ïŒã ã¹ã±ãŒãªã³ã°çŽåŸã®ã·ãããžã§ã¹ãã£ãã«ã¡ã©ã®èŠéãããã©ã«ãå€ã®60床ã«æ»ãããã«ã³ã³ãããŒã©ãŒãæ§æããŸãã
ãããè¡ãã«ã¯ãè«çå€æ°ïŒãã³ïŒãšfloatåã®å€æ°ãããã°ã©ã ããŠãæåŸã®ãºãŒã ãžã§ã¹ãã£ãŒããã®çµéæéãããŒã¯ããå¿
èŠããããŸãã
private float timeSinceScale; private float timeSincePan; private bool panned;
ãºãŒã ãžã§ã¹ãã£ãå®è¡ãããšãã¯timeSinceScaleå€æ°ã0.0fã«èšå®ããã·ãããžã§ã¹ãã£ãå®è¡ãããšãã¯pannedå€æ°ãTrueã«èšå®ããŸãã ã·ãŒã³ã®ã¡ã€ã³ã«ã¡ã©ã®èŠéã¯ãé·æ¹åœ¢ã¿ããããã«ã®ã¹ã¯ãªããã«èŠãããããã«ãæŽæ°ãµã€ã¯ã«ã§æ§æãããŸãã
timeSinceScale += Time.deltaTime; timeSincePan += Time.deltaTime; if(panned && timeSinceScale >= 0.5f && timeSincePan >= 0.5f) { fieldOfView += 5.0f; panned = false; } if(panned && timeSinceScale <= 0.5f) { fieldOfView = 60.0f; panned = false; } Camera.main.fieldOfView = fieldOfView;
onScaleããã³onPané¢æ°ãæ€èšããŠãã ããã å€æ°float timeSincePanã§ã¯ãã¿ããããã«ã䜿çšããŠã«ã¡ã©ãå¶åŸ¡ããå ŽåãèŠéãåžžã«æ¡å€§ããããšã¯ã§ããŸããã
private void onPanStateChanged(object sender, GestureStateChangeEventArgs e) { switch (e.State) { case Gesture.GestureState.Began: case Gesture.GestureState.Changed: var target = sender as PanGesture; Debug.DrawRay(transform.position, target.WorldTransformPlane.normal); Debug.DrawRay(transform.position, target.WorldDeltaPosition.normalized); var local = new Vector3(transform.InverseTransformDirection(target.WorldDeltaPosition).x, transform.InverseTransformDirection(target.WorldDeltaPosition).y, 0); targetPan += transform.InverseTransformDirection(transform.TransformDirection(local));
å³3.å³åŽã®ã¿ããããã«ã®é·æ¹åœ¢ã䜿çšããŠè¿äŒŒãããç»åãæã€ã·ãŒã³ã®ã¡ã€ã³ã«ã¡ã©ãã¯ãªãã¯ãã¯ãªãã¯ã§ãªãªãŒã¹
å°æã®çãæŒããŠé¢ããããã«æ²¿ã£ãŠåç§éæç»ãããšãã³ã³ãããŒã©ãŒã®æ°Žå¹³é床ãäžããããšãã§ããŸãã
ãã®æ©èœããµããŒãããããã«ãfloatåã®å€æ°ãšãå°æã®çãæŸããžã§ã¹ãã£ãŒãšãããã¯ãªãã¯ãããžã§ã¹ãã£ãŒããã®æéãããŒã¯ã§ããè«çå€æ°ãè¿œå ããŸãã
private float timeSinceRelease; private bool flicked;
æåã«ã·ãŒã³ãã»ããã¢ãããããšãã«ãå·Šæã®å°æçãã³ã³ãããŒã©ãŒãå·Šã«ç§»åã§ããããã«ãå°æçã¹ã¯ãªããã«InputControllerã³ã³ãããŒã©ãŒã¹ã¯ãªãããžã®ã¢ã¯ã»ã¹æš©ãäžããŸããã ã³ã³ãããŒã©ãŒã®æ°Žå¹³é床ãå¶åŸ¡ããå€æ°ã¯ãInputControllerã¹ã¯ãªããã§ã¯ãªããCharacterMotorã¹ã¯ãªããã«ãããŸãã åãæ¹æ³ã§ãå·Šå°æã®çäœã®ã¹ã¯ãªãããCharacterMotorã¹ã¯ãªããã«æž¡ãããšãã§ããŸãã
CH = GameObject.Find("First Person Controller"); CHFPSInputController = (FPSInputController)CH.GetComponent("FPSInputController"); CHCharacterMotor = (CharacterMotor)CH.GetComponent ("CharacterMotor");
ã¹ã¯ãªããã®onFlické¢æ°ã§ã¯ãããªãã¯ãããããŒã«å€ãTrueã«ã®ã¿èšå®ã§ããŸãã
ã¹ã¯ãªããã®Updateé¢æ°ã¯ãã¬ãŒã ããšã«1ååŒã³åºãããã³ã³ãããŒã©ãŒã®æ°Žå¹³æ¹åã®åãã次ã®ããã«å€æŽããŸãã
if(flicked && timeSinceRelease <= 0.5f) { CHCharacterMotor.movement.maxSidewaysSpeed += 2.0f; flicked = false; } timeSinceRelease += Time.deltaTime; }
ãã®ã³ãŒãã®ãããã§ãæ°Žå¹³é床ãäžããããšãã§ããŸãã ãããè¡ãã«ã¯ãå°æã®çäœãæŒããŠé¢ãã0.5ç§éæç»ããŸãã ããŸããŸãªæ¹æ³ã§æ°Žå¹³æžé床ãèšå®ã§ããŸãã ããšãã°ããããè¡ãã«ã¯ã人差ãæã®çãæŒããŠæŸããã¯ãªãã¯ããŸãã CHCharacterMotor.movementã¡ãœããã«ã¯ãmaxSidewaysSpeedãã©ã¡ãŒã¿ãŒã ãã§ãªããéåãmaxForwardsSpeedãmaxBackwardsSpeedãªã©ãå«ãŸããŠããããšã«æ³šæããŠãã ããã TouchScriptã©ã€ãã©ãªã®ããŸããŸãªãžã§ã¹ãã£ãŒãšãžã§ã¹ãã£ãŒãåŠçãããªããžã§ã¯ãããããã®ãã©ã¡ãŒã¿ãŒãšçµã¿åãããŠäœ¿çšââãããšãUnity 3Dã·ãŒã³ã§ã¿ããã€ã³ã¿ãŒãã§ã€ã¹ãéçºããããã®ååãªæ©äŒãšããŸããŸãªæŠç¥ãæäŸãããŸãã ãã®ãããªã¢ããªã±ãŒã·ã§ã³çšã®ã¿ããã€ã³ã¿ãŒãã§ã€ã¹ãäœæããå ŽåãããŸããŸãªãªãã·ã§ã³ãè©ŠããŠãæãå¹æçã§äººéå·¥åŠã«åºã¥ãããã®ãéžæã§ããŸãã
ãžã§ã¹ãã£ãŒã®åé¡
ãã®èšäºã§äœ¿çšãããžã§ã¹ãã£ã·ãŒã±ã³ã¹ã¯ãTime.deltaTimeé¢æ°ã«å€§ããäŸåããŠããŸãã ãã®é¢æ°ãã¢ã¯ã·ã§ã³ã決å®ããååŸã«ããã®é¢æ°ãããŸããŸãªãžã§ã¹ãã£ãŒãšçµã¿åãããŠäœ¿çšââããŸãã ãããã®ã±ãŒã¹ãèšå®ãããšãã«ééãã2ã€ã®äž»ãªåé¡ã¯ãæéééã®ãµã€ãºãšãžã§ã¹ãã£ãŒã®æ§è³ªã§ãã
æééé
ãã®èšäºãæžããšããç§ã¯0.5ç§ééã䜿çšããŸããã 10åã®1ç§ã«çããééãéžæããå Žåãããã€ã¹ã¯äžé£ã®ãžã§ã¹ãã£ãŒãèªèã§ããŸããã§ããã ã¿ããã®ããŒã¹ã¯ååã«éãããã«èŠããŸããããããã¯ç»é¢äžã§å¿
èŠãªã¢ã¯ã·ã§ã³ã«ã€ãªãããŸããã§ããã ããã¯ãããããããã€ã¹ãšãœãããŠã§ã¢ã®åäœã®é
延ãåå ã§ããããããžã§ã¹ãã£ã·ãŒã±ã³ã¹ãéçºãããšãã«ã¿ãŒã²ãããã©ãããã©ãŒã ã®ããã©ãŒãã³ã¹ãèæ
®ããããšããå§ãããŸãã
ãžã§ã¹ãã£ãŒ
ãã®äŸã«åãçµãã§ãããšããç§ã¯ããšããšã¹ã±ãŒãªã³ã°ãšã·ããããããŠã¿ãããšã¯ãªãã¯ã®ãžã§ã¹ãã£ãŒã䜿çšããã€ããã§ããã ã¹ã±ãŒãªã³ã°ãšã·ããã¯æ£ããæ©èœããŸããããã¿ãããžã§ã¹ãã£ãè¿œå ãããšããã«åæ¢ããŸããã ãºãŒã ãšã·ãããžã§ã¹ãã£ã®ã·ãŒã±ã³ã¹ãèšå®ã§ããŸãããããŠãŒã¶ãŒãã¬ã³ããªãŒã§ã¯ãããŸããã ããæåãããªãã·ã§ã³ã¯ãã¹ã±ãŒãªã³ã°ãšã·ããåŸã«ã¿ãããä¿æãããžã§ã¹ãã£ãŒãä¿æããããã«ãã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã«å¥ã®ã¿ããã¿ãŒã²ãããæ§æããããšã§ãã
ãã®äŸã§ã¯ã0.5ç§ã®æéééã䜿çšããŠãã¢ã¯ã·ã§ã³ãå®äºãããã©ãããå€æããŸãã è€æ°ã®æéééãèšå®ããããšãã§ããŸãããããã«ããã€ã³ã¿ãŒãã§ã€ã¹ãè€éã«ãªããŸãã ããšãã°ãåç§éæŒãããæŸããããããžã§ã¹ãã£ã®ã·ãŒã±ã³ã¹ã¯ãæ°Žå¹³é床ãäžããããšãã§ãã0.5ç§ãã1ç§ã®ééãæã€åæ§ã®ã·ãŒã±ã³ã¹ã¯é
ããªããŸãã ãã®æ¹æ³ã§æéééã䜿çšãããšããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãããæè»ã«ã«ã¹ã¿ãã€ãºã§ããã ãã§ãªããã·ãŒã³ã«é ãããç§å¯ãè¿œå ããããšãã§ããŸãã
ãããã«
ãã®èšäºã§ã¯ãWindows 8ãæèŒããUltrabookã®TouchScriptã©ã€ãã©ãªã䜿çšããŠãUnity * 3Dã§ããŸããŸãªãžã§ã¹ãã£ãŒã·ãŒã±ã³ã¹ãå«ãã·ãŒã³ãã»ããã¢ããããŸããããããã®ã·ãŒã±ã³ã¹ã®ç®çã¯ããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãå¶åŸ¡ããç»é¢é åãåæžããããšã§ãã ãã®å Žåãé
åçãªã³ã³ãã³ãã衚瀺ããããã«å€§ããªç»é¢é åãå²ãåœãŠãããšãã§ããŸãã
ãžã§ã¹ãã£ã·ãŒã±ã³ã¹ãæ£ããæ©èœããªãã£ãå Žåãé©åãªä»£æ¿ãœãªã¥ãŒã·ã§ã³ãèŠã€ããããšãã§ããŸããã æ§æã¿ã¹ã¯ã®1ã€ã¯ãæ¢åã®ããã€ã¹ã§Time.deltaTimeé¢æ°ã䜿çšããŠäžé£ã®æäœã®æ£ããæäœãå®çŸããããšã§ããã ãããã£ãŠããã®èšäºã®ããã«Unity 3Dã§äœæããã·ãŒã³ã¯ããžã§ã¹ãã£ã·ãŒã±ã³ã¹ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ãã©ãããã©ãŒã ãšããŠã®Ultrabookããã€ã¹äžã®Windows 8ã®å®è¡å¯èœæ§ã確èªããŸãã