2018年5月9日 星期三

Week11 張凱盛


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;
    }

}

沒有留言:

張貼留言