Unity AR开发 | 获取Controller的Position和Rotation
1. 前序
- Unity场景搭建:射线点击UI设计
- 文章目的:当按下Controller某个按键时,记录手柄在空间中的位姿(位置和姿态)
2. 新建所需组件
2.1 在Canvas目录下新建两个Button
- 点击Button-2用于记录Position
- 点击Button-3用于记录Rotation
3. 设置Button-2 属性脚本
3.1 新建ShowPosition脚本并添加至Button-2
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ShowPosition : MonoBehaviour
{
public Text infoText;
// Start is called before the first frame update
void Start()
{
infoText = GameObject.Find("Text").GetComponent<Text>();
}
// Update is called once per frame
void Update()
{
}
public void positionShow()
{
Vector3 position = OVRInput.GetLocalControllerPosition(OVRInput.Controller.RTouch);
Debug.Log(position);
infoText.text = position.ToString();
}
}
3.2 定义触发功能
将Button-2拖入触发物体框中,函数选择ShowPosition.positionShow, 意思是调用Button-2【GameObject】下的ShowPosition【Component】里的positionShow【函数】。
4. 设置Button-3 属性脚本
4.1 新建ShowRotation脚本并添加至Button-3
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ShowRotation : MonoBehaviour
{
public Text infoText;
// Start is called before the first frame update
void Start()
{
infoText = GameObject.Find("Text").GetComponent<Text>();
}
// Update is called once per frame
void Update()
{
}
public void rotationShow()
{
Quaternion rotation = OVRInput.GetLocalControllerRotation(OVRInput.Controller.RTouch);
infoText.text = rotation.ToString();
}
}
4.2 定义触发功能
类似3.2
5. 运行结果
***
6. 总结
6.1 主要调用了OVRInput里面的Get()系列函数
GetLocalControllerPosition
和 GetLocalControllerRotation
分别返回一个Vector3 和 Quaaternion 使用句型如下:
Vector3 position = OVRInput.GetLocalControllerPosition(OVRInput.Controller.RTouch);
Quaternion rotation = OVRInput.GetLocalControllerRotation(OVRInput.Controller.RTouch);
OVRInput.Controller.RTouch代表右手柄
6.2 主要Button组件里面脚本要调用的函数设置为Public,否则无法在触发设置里找到
6.3 text的显示只能是字符,要用tostring函数转换
使用句型如下: infoText.text = rotation.ToString();