public void CheckAreaField(GameObject target, Transform transform)
 {
     MeshUtility.GetVerticesXZ_MaxMin(target, transform, out pointList, out paralleZList, out paralleXList);
     pList = Util_Vector.List_Vec3To4Add0(pointList);
     Debug.Log("paralleZList=" + Singleton <FieldModel> .GetInstance().paralleZList + "   count =" + Singleton <FieldModel> .GetInstance().paralleZList.Count);
     Debug.Log("paralleZList=" + Singleton <FieldModel> .GetInstance().paralleXList + "   count =" + Singleton <FieldModel> .GetInstance().paralleXList.Count);
 }
Beispiel #2
0
    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);
    }
Beispiel #3
0
 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);
 }
Beispiel #4
0
 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);
 }
Beispiel #5
0
    private bool ParalleCheck(Vector3 v1, Vector3 v01, Vector3 p1, Vector3 p2)
    {
        if (paralleYList == null)
        {
            paralleYList = new List <List <Vector3> >();
        }
        if (paralleXList == null)
        {
            paralleXList = new List <List <Vector3> >();
        }
        if (Util_Vector.IsParallel(v1, v01))
        {
            List <Vector3> p = new List <Vector3>();// { pointList[0], pointList[1] }
            if (Util_Vector.IsParallelAndDirection(v1, v01) == 1)
            {
                p.Add(p1);
                p.Add(p2);
            }
            else
            {
                p.Add(p2);
                p.Add(p1);
            }
            if (paralleYList.Count == 1)
            {
                if (Util_Vector.PointOnLeftSide((paralleYList[0][0] - paralleYList[0][1]), p[0]))
                {
                    paralleYList.Insert(0, p);
                }
                else
                {
                    paralleYList.Add(p);
                }
            }
            else
            {
                paralleYList.Add(p);
            }
            return(true);
        }
        else
        {
            List <Vector3> p = new List <Vector3>();// { pointList[0], pointList[1] }
            if (Util_Vector.IsParallelAndDirection(v1, Quaternion.AngleAxis(targetRotation.eulerAngles.y, Vector3.up) * Vector3.right) == 1)
            {
                p.Add(p1);
                p.Add(p2);
            }
            else
            {
                p.Add(p2);
                p.Add(p1);
            }
            if (paralleXList.Count == 1)
            {
                if (Util_Vector.PointOnLeftSide((paralleXList[0][0] - paralleXList[0][1]), p[0]))
                {
                    paralleXList.Insert(0, p);
                }
                else
                {
                    paralleXList.Add(p);
                }
            }
            else
            {
                paralleXList.Add(p);
            }

            return(false);
        }
    }
Beispiel #6
0
 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;
     }
 }
Beispiel #7
0
    /// <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);
                //}
                //================
            }
        }
    }
Beispiel #8
0
    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;
            //}
        }
    }
Beispiel #9
0
    private static bool ParalleCheck(GameObject target, Vector3 p1, Vector3 p2, List <List <Vector3> > paralleZList, List <List <Vector3> > paralleXList, out List <List <Vector3> > list)
    {
        // paralleZList = new List<List<Vector3>>();
        //paralleXList = new List<List<Vector3>>();
        Vector3 p3 = p1 - p2;

        if (Util_Vector.IsParallel(p3, target.transform.forward))
        {
            List <Vector3> p = new List <Vector3>();// { pointList[0], pointList[1] }
            if (Util_Vector.IsParallelAndDirection(p3, target.transform.forward) == 1)
            {
                p.Add(p1);
                p.Add(p2);
            }
            else
            {
                p.Add(p2);
                p.Add(p1);
            }
            if (paralleZList.Count == 1)
            {
                if (Util_Vector.PointOnLeftSide((paralleZList[0][0] - paralleZList[0][1]), p[0]))
                {
                    paralleZList.Insert(0, p);
                }
                else
                {
                    paralleZList.Add(p);
                }
            }
            else
            {
                paralleZList.Add(p);
            }
            list = paralleZList;
            return(true);
        }
        else
        {
            List <Vector3> p = new List <Vector3>();// { pointList[0], pointList[1] }
            if (Util_Vector.IsParallelAndDirection(p3, target.transform.right) == 1)
            {
                p.Add(p1);
                p.Add(p2);
            }
            else
            {
                p.Add(p2);
                p.Add(p1);
            }
            if (paralleXList.Count == 1)
            {
                if (Util_Vector.PointOnLeftSide((paralleXList[0][0] - paralleXList[0][1]), p[0]))
                {
                    paralleXList.Insert(0, p);
                }
                else
                {
                    paralleXList.Add(p);
                }
            }
            else
            {
                paralleXList.Add(p);
            }
            list = paralleXList;
            return(false);
        }
    }