タッチパッドのスライド操作 でオブジェクトを移動する
2018/6/22
対象: Unity2018.1.1f1
Oculus Goのタッチパッドによる方向入力は、中心を(0,0)、周囲を-1〜1としたアナログコントローラー的な座標でのみ取得可能である。
そのため、PCのマウス・タッチパッド的な相対移動量による値の取得がAPIからは取得できないため、自前で実装する必要がある。(もし他に方法があれば教えてください)。
以下にサンプルコードを提示する。
加速度の部分はかなりいい加減なので修正した方が良い。
加速度対応が不要ならmulSubPosを作成せずにそのままsubPos2を使う。その場合、speed係数
code:TouchPadController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TouchPadController : MonoBehaviour {
public Transform target;
public float speed = 1f;
public float threashold = 0.001f;
private bool isDown = false;
private Vector2 prevPos;
// Update is called once per frame
void Update () {
var touch = OVRInput.Get(OVRInput.Touch.One);
var rawPos = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad);
if (!touch) {
isDown = false;
}
else if(!isDown && touch) {
isDown = true;
prevPos = rawPos;
}
if (isDown){
//差分取得
var subPos = rawPos - prevPos;
//閾値判定
Vector2 subPos2;
subPos2.x = (Mathf.Abs(subPos.x) < threashold) ? 0 : subPos.x;
subPos2.y = (Mathf.Abs(subPos.y) < threashold) ? 0 : subPos.y;
//加速度対応で移動量が小さい時はより小さく扱う
var mulSubPos = new Vector2(subPos2.x * Mathf.Abs(subPos2.x), subPos2.y * Mathf.Abs(subPos2.y));
//speed * 0.1が実際の係数
var eSubPos = mulSubPos * (speed * 0.1f / Time.deltaTime);
//x=>x, y=>zとして扱う
target.transform.position += new Vector3(eSubPos.x, 0, eSubPos.y);
prevPos = rawPos;
}
}
}