VR移動
using UnityEngine;
using System.Collections;
using Valve.VR;
public class myTouchpad : MonoBehaviour
{
public GameObject player;
SteamVR_Controller.Device device;
public SteamVR_TrackedObject controller;
Vector2 touchpad;
private float sensitivityX = 1.5F;
private Vector3 playerPos;
void Start()
{
}
// Update is called once per frame
void Update()
{
if (controller == null)
return;
var device = SteamVR_Controller.Input((int)controller.index);
//If finger is on touchpad
if (device.GetTouch(SteamVR_Controller.ButtonMask.Touchpad))
{
//Read the touchpad values
touchpad = device.GetAxis(EVRButtonId.k_EButton_SteamVR_Touchpad);
// Handle movement via touchpad
if (touchpad.y > 0.2f || touchpad.y < -0.2f) {
// Move Forward
player.transform.position -= player.transform.forward * Time.deltaTime * (touchpad.y * 5f);
// Adjust height to terrain height at player positin
playerPos = player.transform.position;
playerPos.y = Terrain.activeTerrain.SampleHeight (player.transform.position);
player.transform.position = playerPos;
}
// handle rotation via touchpad
if (touchpad.x > 0.3f || touchpad.x < -0.3f) {
player.transform.Translate (Vector3.right*touchpad.x *Time.deltaTime);
}
//Debug.Log ("Touchpad X = " + touchpad.x + " : Touchpad Y = " + touchpad.y);
}
}
}
ChildTransform.cs
using UnityEngine;
using System.Collections;
public class ChildTransform : MonoBehaviour
{
public Transform same;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void FixedUpdate () {
transform.localEulerAngles = new Vector3(0,same.localEulerAngles.y,0);
transform.localPosition = new Vector3(same.localPosition.x, 0, same.localPosition.z);
}
}
MOVE 腳本
using UnityEngine;
using System.Collections;
public class Move : BaseClass
{
///
/// 手柄位置
///
SteamVR_TrackedObject tracked;
///
/// 玩家
///
public Transform player;
///
/// 方向
///
public Transform dic;
///
/// 速度
///
public float speed;
void Awake()
{
//获取手柄控制
tracked = GetComponent();
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void FixedUpdate () {
var deviceright = SteamVR_Controller.Input((int)tracked.index);
//按下圆盘键
if (deviceright.GetPress(SteamVR_Controller.ButtonMask.Touchpad))
{
Vector2 cc = deviceright.GetAxis();
float angle = VectorAngle(new Vector2(1, 0), cc);
//下
if (angle > 45 && angle < 135)
{
player.Translate(-dic.forward * Time.deltaTime * speed);
}
//上
else if (angle < -45 && angle > -135)
{
//Debug.Log("上");
player.Translate(dic.forward * Time.deltaTime * speed);
}
//左
else if ((angle < 180 && angle > 135) || (angle < -135 && angle > -180))
{
//Debug.Log("左");
player.Translate(-dic.right * Time.deltaTime * speed);
}
//右
else if ((angle > 0 && angle < 45) || (angle > -45 && angle < 0))
{
//Debug.Log("右");
player.Translate(dic.right * Time.deltaTime * speed);
}
}
}
///
/// 根据在圆盘才按下的位置,返回一个角度值
///
///
///
///
float VectorAngle(Vector2 from, Vector2 to)
{
float angle;
Vector3 cross = Vector3.Cross(from, to);
angle = Vector2.Angle(from, to);
return cross.z > 0 ? -angle : angle;
}
}
沒有留言:
張貼留言