private bool hitMoveShowPerfab(ARPoint point, ARHitTestResultType resultTypes) { List <ARHitTestResult> hitResults = UnityARSessionNativeInterface.GetARSessionNativeInterface().HitTest(point, resultTypes); if (hitResults.Count > 0) { Debug.Log("hitResults.Count=" + hitResults.Count); foreach (var hitResult in hitResults) { Vector3 vposition = UnityARMatrixOps.GetPosition(hitResult.worldTransform) - touchOffset; Debug.Log("TouchPhase.Moved touchOffset=" + touchOffset); Debug.Log("vposition=" + vposition); foreach (var v in paralleYList) { if (showPerfabs.transform.localScale.x * offsetFactor / 2 < Util_Vector.DisPoint2Line(vposition, v[0], v[1]) ) { moveFlagX = false; break; } } foreach (var v in paralleXList) { if (showPerfabs.transform.localScale.z * offsetFactor / 2 < Util_Vector.DisPoint2Line(vposition, v[0], v[1]) ) { moveFlagY = false; break; } } //Debug.Log("moveFlagX=" + moveFlagX); ////Debug.Log("deltaPos.x=" + deltaPos.x); vposition.x Vector3 endpostion = vposition; if (!moveFlagX) { endpostion.x = touchMoveEnd.x; } if (!moveFlagY) { endpostion.z = touchMoveEnd.z; } showPerfabs.transform.position = endpostion; //showPerfabs.transform.position = vposition; touchMoveEnd = showPerfabs.transform.position; //Debug.Log("touchMoveEnd=" + touchMoveEnd); //if (flag) showPerfabs.transform.Translate((paralleXlList[0][0] - paralleXlList[0][1]).normalized * deltaPos.x * 0.001f, Space.World); //if (flag) showPerfabs.transform.Translate((paralleZList[0][0] - paralleZList[0][1]).normalized * deltaPos.z * 0.001f, Space.World); return(true); } } return(false); }
public bool CheckListDistanceParalle_X(float scale, Vector3 point) { foreach (var v in paralleXList) { float distance = Util_Vector.DisPoint2Line(point, v[0], v[1]); if (scale * offsetFactor / 2 <= distance) { return(false); } } return(true); }
public bool CheckListDistanceParalle_X(Vector3 point) { foreach (var v in paralleXList) { float distance = Util_Vector.DisPoint2Line(point, v[0], v[1]); if (showPerfabs.transform.localScale.z * offsetFactor / 2 <= distance) { return(false); } } return(true); }
private void TouchScaleType() { if (Input.touchCount > 0) { scaleFlag = true; //多点触摸, 放大缩小 Touch newTouch1 = Input.GetTouch(0); Touch newTouch2 = Input.GetTouch(1); //第2点刚开始接触屏幕, 只记录,不做处理 if (newTouch2.phase == TouchPhase.Began) { oldTouch2 = newTouch2; oldTouch1 = newTouch1; return; } //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型 float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position); float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position); //两个距离之差,为正表示放大手势, 为负表示缩小手势 float offset = newDistance - oldDistance; //放大因子, 一个像素按 0.01倍来算(100可调整) float scaleFactor = offset / scaleAD; Vector3 localScale = showPerfabs.transform.localScale; Vector3 scale = new Vector3(localScale.x + scaleFactor, localScale.y + scaleFactor, localScale.z + scaleFactor); if (scaleFactor < 0) { foreach (var v in paralleYList) { //if (showPerfabs.transform.localScale.x * offsetFactor / 2 < if (scale.x * offsetFactor / 2 < Util_Vector.DisPoint2Line(showPerfabs.transform.position, v[0], v[1]) ) { scaleFlag = false; break; } } foreach (var v in paralleXList) { if (scale.z * offsetFactor / 2 < //if (showPerfabs.transform.localScale.z * offsetFactor / 2 < Util_Vector.DisPoint2Line(showPerfabs.transform.position, v[0], v[1]) ) { scaleFlag = false; break; } } } ////最小缩放到 0.1 倍 //if (scale.x > 0.1f && scale.y > 0.1f && scale.z > 0.1f) //{ // showPerfabs.transform.localScale = scale; //} if (scaleFlag) { if (scale.x < 1.0f) { showPerfabs.transform.localScale = scale; } } ////最小缩放到 0.1 倍 //if (scale.x > 0.1f && scale.y > 0.1f && scale.z > 0.1f) //{ // showPerfabs.transform.localScale = scale; //} //记住最新的触摸点,下次使用 oldTouch1 = newTouch1; oldTouch2 = newTouch2; } }
/// <summary> /// 基于屏幕控制物体移动 /// </summary> private void TouchMoveType2() { if (Input.touchCount > 0) { if (1 == Input.touchCount) { moveFlagX = true; moveFlagY = true; Touch touch = Input.GetTouch(0); Vector2 deltaPos = touch.deltaPosition; Debug.Log("paralleZList count=" + paralleYList.Count); Debug.Log("showPerfabs.transform.localScale.x * offsetFactor / 2 count=" + showPerfabs.transform.localScale.x * offsetFactor / 2); //for (int i = 0; i < paralleZList.Count; i++) //{ // if (i == 0) // { // if (deltaPos.x < 0) continue; // } // else // { // if (deltaPos.x > 0) continue; // } // if (showPerfabs.transform.localScale.x * offsetFactor / 2 < // GeometryTools.DisPoint2Line(showPerfabs.transform.position + (paralleXlList[i][0] - paralleXlList[i][1]).normalized * deltaPos.x * 0.01f, paralleXlList[i][0], paralleXlList[i][1]) // ) // { // moveFlagX = false; // //break; // Debug.Log("distans=" + GeometryTools.DisPoint2Line(showPerfabs.transform.position + (paralleXlList[0][0] - paralleXlList[0][1]).normalized * deltaPos.x * 0.01f, paralleXlList[i][0], paralleXlList[i][1])); // } //} foreach (var v in paralleYList) { if (showPerfabs.transform.localScale.x * offsetFactor / 2 < Util_Vector.DisPoint2Line(showPerfabs.transform.position + (paralleXList[0][0] - paralleXList[0][1]).normalized * deltaPos.x * 0.01f, v[0], v[1]) ) { moveFlagX = false; //break; } Debug.Log("distans=" + Util_Vector.DisPoint2Line(showPerfabs.transform.position + (paralleXList[0][0] - paralleXList[0][1]).normalized * deltaPos.x * 0.01f, v[0], v[1])); } Debug.Log("deltaPos.x=" + deltaPos.x); Debug.Log("moveFlagX=" + moveFlagX); if (moveFlagX) { showPerfabs.transform.Translate((paralleXList[0][0] - paralleXList[0][1]).normalized * deltaPos.x * 0.001f, Space.World); } foreach (var v in paralleXList) { if (showPerfabs.transform.localScale.z * offsetFactor / 2 < Util_Vector.DisPoint2Line(showPerfabs.transform.position + (paralleYList[0][0] - paralleYList[0][1]).normalized * deltaPos.y * 0.01f, v[0], v[1]) ) { moveFlagY = false; break; } } if (moveFlagY) { showPerfabs.transform.Translate((paralleYList[0][0] - paralleYList[0][1]).normalized * deltaPos.y * 0.001f, Space.World); } //if (flag) showPerfabs.transform.Translate((paralleXlList[0][0] - paralleXlList[0][1]).normalized * deltaPos.x * 0.001f, Space.World); //if (flag) showPerfabs.transform.Translate((paralleZList[0][0] - paralleZList[0][1]).normalized * deltaPos.z * 0.001f, Space.World); //for (int i = 0; i < paralleXlList.Count; i++) //{ // if (i == 0) // { // if (deltaPos.y < 0) continue; // } // else // { // if (deltaPos.y > 0) continue; // } // if (showPerfabs.transform.localScale.z * offsetFactor / 2 < // GeometryTools.DisPoint2Line(showPerfabs.transform.position + (paralleZList[i][0] - paralleZList[i][1]).normalized * deltaPos.y * 0.01f, paralleZList[i][0], paralleZList[i][1]) // ) // { // moveFlagX = false; // //break; // Debug.Log("distans=" + GeometryTools.DisPoint2Line(showPerfabs.transform.position + (paralleZList[i][0] - paralleZList[i][1]).normalized * deltaPos.y * 0.01f, paralleZList[i][0], paralleZList[i][1])); // } //} //============================================= //Debug.Log("deltaPos=" + touch.deltaPosition); //pt = showPerfabs.transform.position + (Vector3.right * Mathf.Sin(Camera.main.transform.rotation.eulerAngles.y) + Vector3.forward * Mathf.Cos(Camera.main.transform.rotation.eulerAngles.y)) // * deltaPos.x * 0.001f; //if (Util.PointInPolygon(pt, pointList)) //{ // showPerfabs.transform.Translate( // (Vector3.right * Mathf.Sin(Camera.main.transform.rotation.y) + Vector3.forward * Mathf.Cos(Camera.main.transform.rotation.y)) // * deltaPos.x * 0.001f, Space.World); //} //================ } } }
private void KeyControl() { Vector3 deltaPos = Vector3.zero; bool flag = true; if (Input.GetKey(KeyCode.RightArrow)) { deltaPos = Vector3.right; } if (Input.GetKey(KeyCode.LeftArrow)) { deltaPos = Vector3.left; } if (Input.GetKey(KeyCode.UpArrow)) { deltaPos = Vector3.forward; } if (Input.GetKey(KeyCode.DownArrow)) { deltaPos = Vector3.back; } //if(paralleZList!=null) //{ foreach (var v in paralleYList) { if (showPerfabs.transform.localScale.x * offsetFactor / 2 < Util_Vector.DisPoint2Line(showPerfabs.transform.position + (paralleXList[0][0] - paralleXList[0][1]).normalized * deltaPos.x * 0.01f, v[0], v[1]) ) { flag = false; break; } } if (flag) { showPerfabs.transform.Translate((paralleXList[0][0] - paralleXList[0][1]).normalized * deltaPos.x * 0.001f, Space.World); } //} //foreach (var v in paralleXlList) //{ // //Debug.Log("(showPerfabs.transform.localScale.z * offsetFactor / 2=" + (showPerfabs.transform.localScale.z * offsetFactor / 2)); // //Debug.Log(" GeometryTools.DisPoint2Line(showPerfabs.transform.position + Vector3.forward * deltaPos.z * 0.01f, v[0], v[1])=" + GeometryTools.DisPoint2Line(showPerfabs.transform.position + (paralleZList[0][0] - paralleZList[0][1]).normalized * deltaPos.z * 0.01f, v[0], v[1])); // //Debug.Log("============================================"); // if (showPerfabs.transform.localScale.z * offsetFactor / 2 < // GeometryTools.DisPoint2Line(showPerfabs.transform.position + (paralleZList[0][0] - paralleZList[0][1]).normalized * deltaPos.z * 0.01f, v[0], v[1]) // ) // { // flag = false; // break; // } //} ////if (flag) showPerfabs.transform.Translate(Vector3.right * deltaPos.x * 0.001f, Space.World); ////if (flag) showPerfabs.transform.Translate(Vector3.forward * deltaPos.z * 0.001f, Space.World); ////Debug.Log("============================================"+ (paralleXlList[0][0] - paralleXlList[0][1]).normalized); //if (flag) showPerfabs.transform.Translate((paralleZList[0][0] - paralleZList[0][1]).normalized * deltaPos.z * 0.001f, Space.World); //================================= if (Input.GetKey(KeyCode.S)) { //两个距离之差,为正表示放大手势, 为负表示缩小手势 float offset = -1; //放大因子, 一个像素按 0.01倍来算(100可调整) float scaleFactor = offset / scaleAD; Vector3 localScale = showPerfabs.transform.localScale; Vector3 scale = new Vector3(localScale.x + scaleFactor, localScale.y + scaleFactor, localScale.z + scaleFactor); foreach (var v in paralleYList) { if (showPerfabs.transform.localScale.x * offsetFactor / 2 < Util_Vector.DisPoint2Line(showPerfabs.transform.position, v[0], v[1]) ) { flag = false; break; } } foreach (var v in paralleXList) { if (showPerfabs.transform.localScale.z * offsetFactor / 2 < Util_Vector.DisPoint2Line(showPerfabs.transform.position, v[0], v[1]) ) { flag = false; break; } } if (flag) { showPerfabs.transform.localScale = scale; } ////最小缩放到 0.1 倍 //if (scale.x > 0.1f && scale.y > 0.1f && scale.z > 0.1f) //{ // showPerfabs.transform.localScale = scale; //} } }