Операция Модель AR + Vuforia +

теги и слой модель Mode

 

используя System.Collections; 
используя System.Collections.Generic; 
используя UnityEngine; 

ARModelOperator общественного класса: MonoBehaviour { 

    частная aRCamera камеры; 
// строка Имя_целевого_объект общественности; 
    частное перечисление TouchType 
    { 
        DefaultType = 0, 
        ShortClick = 1, 
        LongClick = 2, 
        DoubleClick = 3, 
        RightClick = 4, 
    }; 

    частная BOOL onDrag = ложь; 
    частный Vector2 StartPos; 
    TouchType operatorType = TouchType.DefaultType; 
    Скорость поплавка = 250f; 
    Vector2 oldPosition1, oldPosition2; 
    поплавковый расстояние = 30f; 
    плавать scaleRatio = 0.1f;
   BOOL isAnimation общественности = ложь; 
    аннулированию Start () 
    { 
        aRCamera = GameObject.Find ( "RenderCamera") GetComponent <Camera> () ;. 
    } 
    // увеличена функция возвращает True, False возвращается сужать 
    BOOL isEnlarge (Vector2 OP1, Vector2 ФП2 , то Vector2 NP1, NP2 Vector2) 
    { 
        // на функцию передается на одну позицию касания и положение двух точек касания в соответствии с настоящим вычисляемого жест пользователя 
        вар leng1 = Mathf.Sqrt ((oP1.x - oP2.x) * (oP1.x - oP2.x) + (oP1.y - oP2.y) * (oP1.y - oP2.y)); 
        вар leng2 Mathf.Sqrt = ((nP1.x - nP2.x) * (NP1 .x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y)); 
        IF (leng1 <leng2) 
        { 
            // масштабирование жест 
            возвращение к истине; 
        } 
        еще 
        {
            //缩小手势 
            возврата к ложным; 
        }
    } 

    IEnumerator OnMouseDownClick () 
    { 
        Vector3 = aRCamera.WorldToScreenPoint размера рабочего стола (transform.position); 
        Vector3 смещение = transform.position - aRCamera.ScreenToWorldPoint (новый Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); 
        в то время как (Input.GetMouseButton (0)) 
        { 
            Vector3 curScreenSpace = новый Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); 
            Vector3 curPosition = aRCamera.ScreenToWorldPoint (curScreenSpace) + смещение; 
            transform.position = curPosition; 
            Выход возврата нового WaitForFixedUpdate (); 
        } 
    }

    BOOL CheckIsDoubleTouch (Vector2 mousePos) 
    { 
        луч = aRCamera.ScreenPointToRay (mousePos); 
        вернуться Physics.Raycast (луч, вне хит); 
    } 

    Плавать intervalTime = 0f; 
    RaycastHit удар; 
    Луч излучения; 
    BOOL doubleTouch = ложь; 
    плавать гладкий = 0.1f; 
    Обновление недействительными () 
    { 
       
        ///鼠标滚轮控制模型缩放
        вар SC1 = transform.localScale; 
        //Debug.LogError("distance "+ расстояние); 
        если (Input.GetAxis ( "Мышь ScrollWheel")> 0) 
        { 
            если (расстояние> 18.5f) 
            {
				Расстояние - = ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .InitScale * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier; 
				если (sc1.x <0,4 * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier && sc1.x> 0) 
                { 
					SC1 + = 2 * Vector3.one * * гладкая ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .scalingMultiplier * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier; 
                } 
            } 

        } 
        Если (Input.GetAxis ( "Мышь ScrollWheel") <0) 
        { 
            если (расстояние <= 34f) 
            {
                //Debug.LogError(hit.collider.name);  
        } 
        Transform.localScale = SC1;

                Расстояние + = ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .InitScale * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier; 
				если (sc1.x> 0,8 * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .scalingMultiplier * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier) 
                { 
					SC1 - = 2 * Vector3.one * * гладкая ARModelData.Instance. GetItem (ARGlobalData.CurrentTargetModeName) .scalingMultiplier * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier; 
                } 
            } 

        Если (Input.touchCount> 1) 
        {//双指
            если (! DoubleTouch)
            { 
                DoubleTouch = CheckIsDoubleTouch (Input.touches [0] .position) || CheckIsDoubleTouch (Input.touches [1] .position); 
            } 
            Если (doubleTouch) 
            { 
                если (hit.collider.tag == "Режим") 
                { 

                    если (Input.GetTouch (0) .phase == TouchPhase.Moved || Input.GetTouch (1) .phase == TouchPhase.Moved ) 
                    { 
                        вар tempPosition1 = Input.GetTouch (0) .position; 
                        если (isEnlarge (oldPosition1, oldPosition2, tempPosition1, tempPosition2)) 
                        {
                        вар tempPosition2 = Input.GetTouch (1) .position;
                        вар подкожно = transform.localScale; 
                            если (расстояние> 18.5f) 
                            { 
								расстояние - = ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .InitScale * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier; 
								если (sc.x <= 0,4 * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier && sc.x> 0) 
                                { 
									СБН + = 2 * Vector3.one * * гладкая ARModelData.Instance.GetItem (hit.collider.name) .scalingMultiplier * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier; 
                                } 
                            }
                        }
                                } 
                        Еще 
                        {
                            если (расстояние <34f) 
                            { 
								расстояние + = ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .InitScale * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier; 
								если (sc.x> 0,8 * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .scalingMultiplier * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier) 
                                { 
									подкожно - = 2 * Vector3.one * * гладкая ARModelData.Instance. GetItem (ARGlobalData.CurrentTargetModeName) .scalingMultiplier * ARModelData.Instance.GetItem (ARGlobalData.CurrentTargetModeName) .MaxScalingMultiplier;  
                        }
                            } 
                {
                        transform.localScale = подкожно; 
                        oldPosition1 = tempPosition1; 
                        oldPosition2 = tempPosition2; 
                    } 
                } 
            } 
            Если (Input.GetTouch (1) .phase == TouchPhase.Ended) 
            { 
                doubleTouch = ложь; 
            } 
        } 
        Еще 
        { 
            если (Input.GetMouseButton (0)) 
            { 
                если (Input.GetMouseButtonDown (0)) // || Input.touches [0] .phase == TouchPhase.Began) 
                    StartPos = Input.mousePosition;
                    Луч = aRCamera.ScreenPointToRay (StartPos); 
                    onDrag = Physics.Raycast (луч, из хит); 
                    intervalTime = Time.realtimeSinceStartup; 
                    isAnimation = TRUE; 
                } 

                Если (onDrag) 
                { 

                    если (hit.collider.tag == "Mode") 
                    { 
                        если (== operatorType TouchType.DefaultType) 
                        { 
                            если (Time.realtimeSinceStartup - intervalTime> 0.5f) //长按
                                isAnimation = ложь; 
                            {
                                //Debug.LogError("animales "); 
                                    operatorType = TouchType.ShortClick; //旋转

                                operatorType = TouchType.LongClick; 
                                StartCoroutine (OnMouseDownClick ()); 
                            } 
                            Иначе 
                            { 
                                Vector2 curPos = Input.mousePosition; 
                                если (Mathf.Abs (curPos.x - startPos.x)> Mathf.Abs (curPos.y - startPos.y) && Mathf.Abs (curPos.x - startPos.x)> 5f) 
                                { 
                                    isAnimation = false; 

                                } 
                                Еще 
                                { 
                                    IsAnimation = TRUE; 

                                } 
                            } 
                        } 
                        Еще если (operatorType == TouchType.ShortClick) 
                        { 
                            если (startPos.x> Input.mousePosition.x) //向左滑动
                            { 
                                transform.Rotate (Vector3.up * Time.deltaTime * скорость); 
                            } 
                            Еще если (startPos.x <Input.mousePosition.x) //向右滑动
                            {
                                transform.Rotate (Vector3.down * Time.deltaTime * скорость); 
                            }
                            StartPos = Input.mousePosition; 
                        } 
                    } 
                } 
            } 
            Иначе , если (Input.GetMouseButton (1)) 
            { 
                operatorType = TouchType.RightClick; 
                StartCoroutine (OnMouseDownClick ()); 
            } 
        } 
        Если (Input.GetMouseButtonUp (0)) // || Input.touches [0] .phase == TouchPhase.Ended) 
        { 
            onDrag = ложь; 
            operatorType = TouchType.DefaultType; 
        } 
    } 
}

  

рекомендация

отwww.cnblogs.com/WalkingSnail/p/11304115.html
рекомендация