轉載一篇用htc vive手柄旋轉物體的程式碼
阿新 • • 發佈:2018-11-19
using UnityEngine; using System.Collections; public class lalala : MonoBehaviour { #region Value File [SerializeField] SteamVR_TrackedObject trackedObj; /// <summary> /// 想要移動的物體 /// </summary> [SerializeField] Transform moveObj; //當前位置 float currentPos = 0; //距離差 float disCurrent = 0; //Y軸距當前位置 float currentPosY = 0; //距離差 float disCurrentY = 0; [Tooltip("設定旋轉角度,預設為100")] public float setRotateAngle = 100.0f; [Tooltip("設定上下移動距離,預設為0.5")] public float setMoveDistance = 0.5f; #endregion #region MonoMathod private bool isOnin = false; // Use this for initialization void Start() { } // Update is called once per frame void Update() { currentPos = this.transform.position.x; currentPosY = this.transform.position.y; var decive = SteamVR_Controller.Input((int)trackedObj.index); if ((decive.GetPress(SteamVR_Controller.ButtonMask.Trigger))&&isOnin) { //moveObj.position = new Vector3(0, this.transform.position.y, 0); //moveObj.rotation = Quaternion.LookRotation(this.transform.position); //moveObj.Rotate(new Vector3(0, 0, 0)); if (disCurrent > 0.001f) { print(111111); moveObj.Rotate(-Vector3.up * Time.deltaTime * setRotateAngle); } else if (disCurrent == 0) { return; } else if (disCurrent < -0.001f) { moveObj.Rotate(Vector3.up * Time.deltaTime * setRotateAngle); } //---------------------- //if (disCurrentY > 0.005f) //{ // moveObj.Translate(Vector3.up * Time.deltaTime * setMoveDistance); //} //else if (disCurrentY == 0) //{ // return; //} //else if (disCurrentY < -0.005f) //{ // moveObj.Translate(-Vector3.up * Time.deltaTime * setMoveDistance); //} } } void FixedUpdate() { disCurrent = this.transform.position.x - currentPos; //disCurrentY = this.transform.position.y - currentPosY; } void Awake() { trackedObj = GetComponent<SteamVR_TrackedObject>(); } #endregion private void OnTriggerEnter(Collider collision) { isOnin = true; } private void OnTriggerExit(Collider other) { isOnin = false; } }