今日は、キーボードからではなくて、デイドリームコントローラーからの入力を受け取るように改造していきます(´・ω・)
かなり前にSummonFunc()を作ったときにやったのを思い出しながらやってみます。
条件式:if (GvrControllerInput.ClickButtonDown) でコントローラーのボタンがクリックされたことを認識したときに、関数SummonFunc()を実行しています。
関数SummonFunc()は任意のオブジェクトを任意の座標と向きを定義してヒエラルキーに追加(Instantiate)する内容になっています。
変更しましょう:
Gvrのメソドを利用していきましょう。
GvrControllerInput.以下のメソド
- AppButtonDown : アプリケーションボタンを押したとき
- HomeButtonDown : ホームボタンを押したとき
- ClickButtonDown : タッチパッドボタンを押したとき
- TouchDown : タッチパッドに触れたとき
- TouchPos : タッチパッドに触れている位置(Vector2)
if(GvrControllerInput.TouchDown)
- tpX=0.5,tpY=0.5が中心で
- 前進はtpY<0.3のときにしよう
- 後退はtpY>0.7のときにしよう
- 右を向くのはtpX>0.7のときにしよう
- 左を向くのはtpX<0.3のときにしよう
もっといい方法があるかもしれないが、まずはこれでやってみよう。
スクリプト:PlayerMover2.cs
デイドリームコントローラーで動きました(´・ω・)
まだまだ、改良は必要ですが、とりあえず動くものはできました。
かれこれ、2日まるまるかかってしまいましたが、大きな前進です!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMover2 : MonoBehaviour { [SerializeField] float angularVelocity = 60f; [SerializeField] float movingVelocity = 0.01f; float horizontalAngle = 0f; float frontMove = 0f; //#if UNITY_EDITOR // Update is called once per frame void Update() { Vector2 tp = GvrControllerInput.TouchPos; Debug.Log("touchpad x = "+tp[0]); Debug.Log("touchpad y = " + tp[1]); // transformを取得 座標を取得 vector3形式 Transform myTransform = this.transform; Vector3 moveDirection; //前進 if (tp[1] <0.3f) { // 1updateごとに加算する値を計算 var frontMove = (0.5f - tp[1]) * movingVelocity * Time.deltaTime; // 座標を1updateごとに加算 moveDirection = new Vector3(Mathf.Sin(myTransform.eulerAngles.y * Mathf.Deg2Rad), 0, Mathf.Cos(myTransform.eulerAngles.y * Mathf.Deg2Rad)); // myTransformを更新 myTransform.position += moveDirection * frontMove; } //後退 if (tp[1] > 0.7f) { // 1updateごとに加算する値を計算 var frontMove = - (tp[1] - 0.5f) * movingVelocity * Time.deltaTime; // 座標を1updateごとに加算 moveDirection = new Vector3(Mathf.Sin(myTransform.eulerAngles.y * Mathf.Deg2Rad), 0, Mathf.Cos(myTransform.eulerAngles.y * Mathf.Deg2Rad)); // myTransformを更新 myTransform.position += moveDirection * frontMove; } //右回転 if (tp[0] > 0.7f) { // 1updateごとに加算する値を計算 var horizontalRotation = (tp[0] - 0.5f) * angularVelocity * Time.deltaTime; // 座標を1updateごとに加算 horizontalAngle += horizontalRotation; // myTransformを更新 myTransform.rotation = Quaternion.Euler(0f, horizontalAngle, 0f); } //左回転 if (tp[0] < 0.3f) { // 1updateごとに加算する値を計算 var horizontalRotation = (0.5f - tp[0]) * angularVelocity * Time.deltaTime; // 座標を1updateごとに加算 horizontalAngle -= horizontalRotation; // myTransformを更新 myTransform.rotation = Quaternion.Euler(0f, horizontalAngle, 0f); } if (GvrControllerInput.AppButtonDown) { } } //#endif } |
起動直後になぜか、カメラが動いてしまいます。
後日調整が必要です。