Unity ARFoundation移动现有游戏对象



我是统一arfoundation的新手,并试图实现一个基本示例,我可以在检测到的位置(水平(上放置多个游戏对象并移动特定的游戏对象。

我已经实现了放置多个游戏对象。这是我的代码:

touch = Input.GetTouch(0); // private Touch touch;
if (Input.touchCount < 0 || touch.phase != TouchPhase.Began)
return;
if (isPointerOverUI(touch)) return;
Ray ray = arCamera.ScreenPointToRay(touch.position);
if(_arRayCastManager.Raycast(ray, _hits))
{
Pose pose = _hits[0].pose;
Instantiate(DataHandler.Instance.gameobject, pose.position, pose.rotation);
}

我现在要做的是移动选定/单击的游戏对象。有人可以帮助我解决同样的问题吗?

您可以尝试使用以下代码:

Vector3 v3;
if (Input.touchCount != 1) {
dragging = false; 
return;
}
Touch touch = Input.touches[0];
Vector3 pos = touch.position;
if(touch.phase == TouchPhase.Began) {
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(pos); 
if(Physics.Raycast(ray, out hit) && (hit.collider.tag == "Draggable"))
{
Debug.Log ("Here");
toDrag = hit.transform;
dist = hit.transform.position.z - Camera.main.transform.position.z;
v3 = new Vector3(pos.x, pos.y, dist);
v3 = Camera.main.ScreenToWorldPoint(v3);
offset = toDrag.position - v3;
dragging = true;
}
}
if (dragging && touch.phase == TouchPhase.Moved) {
v3 = new Vector3(Input.mousePosition.x, Input.mousePosition.y, dist);
v3 = Camera.main.ScreenToWorldPoint(v3);
toDrag.position = v3 + offset;
}
if (dragging && (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)) {
dragging = false;
}

这应该检测您是否正在触摸物体,如果是,它会拖动它。

最新更新