Ejemplo n.º 1
0
 /// <summary>
 /// 设置电机旋转目标向量
 /// </summary>
 /// <param name="vector2">旋转目标角度向量</param>
 /// <returns>电机</returns>
 public SD_Motor_Angle SetTarget_Vector(Vector2 vector2)
 {
     if (MotorActivation && vector2 != Vector2.zero)
     {
         MotorTarget = SS_EulerAngleConversion.Get_Angle_In_Vector2(vector2);
     }
     MotorTarget = SS_EulerAngleConversion.Angle_PN_To_P360(MotorTarget);
     return(this);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// 设置电机旋转目标
 /// </summary>
 /// <param name="Angle">旋转目标</param>
 /// <returns>电机</returns>
 public SD_Motor_Angle SetTarget_Angle(float Angle)
 {
     if (MotorActivation)
     {
         MotorTarget = Angle;
     }
     MotorTarget = SS_EulerAngleConversion.Angle_PN_To_P360(MotorTarget);
     return(this);
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 设置电机旋转目标向量
 /// </summary>
 /// <param name="Vector">旋转目标角度向量</param>
 /// <returns>电机</returns>
 public SD_Motor_EulerAngle SetTarget_Vector(Vector3 Vector)
 {
     if (MotorActivation && Vector != Vector3.zero)
     {
         MotorTarget = SS_EulerAngleConversion.Get_EulerAngle_In_Vector3(Vector);
     }
     MotorTarget = SS_EulerAngleConversion.EulerAngle_PN_To_P360(MotorTarget);
     return(this);
 }
Ejemplo n.º 4
0
 /// <summary>
 /// 设置电机旋转目标
 /// </summary>
 /// <param name="Vector">旋转目标</param>
 /// <returns>电机</returns>
 public SD_Motor_EulerAngle SetTarget_Angle(Vector3 Vector)
 {
     if (MotorActivation)
     {
         MotorTarget = Vector;
     }
     MotorTarget = SS_EulerAngleConversion.EulerAngle_PN_To_P360(MotorTarget);
     return(this);
 }
Ejemplo n.º 5
0
        // OnPointerEnter,OnPointerDown
        public void OnPointerDown(PointerEventData eventData)//点击事件
        {
            if (TouchPool.ContainsKey(eventData.pointerId))
            {
                return;
            }
            if (IgnoreMouse && eventData.pointerId < 0)
            {
                return;                                        //忽略鼠标
            }
            if (Overhead)
            {
                TouchObject.SetAsLastSibling();          //顶置自身
            }
            AddTouchData(eventData);

            if (TouchPool.Count < TouchLimit.x || TouchPool.Count > TouchLimit.y)
            {
                return;                                      //触摸限制
            }
            TouchScreening();                                //稳定点筛选

            FirstToSecond      = Touch_Second - Touch_First; //当前手势向量
            FirstToSecond_Last = FirstToSecond;              //上一次的手势向量

            //===================================

            TouchCenterPointer      = Touch_First + FirstToSecond * 0.5f; //当前手势中心点位置
            Save_TouchCenterPointer = TouchCenterPointer;                 //手势中心位置存档
            TouchCenterPointer_Last = TouchCenterPointer;                 //上一帧手势中心位置

            //当前手势向量角度 = 角度计算类.角度转换正负无限数值转换为正360度角(角度计算类.获得两个二维向量的角度差(二维向量.上,当前手势的向量,轴方向翻转));
            TouchAngle = SS_EulerAngleConversion.Angle_PN_To_P360(SS_EulerAngleConversion.Get_Angle_In_Vector2Deviation(Vector2.up, FirstToSecond, false));

            Save_TouchAngle = TouchAngle;               //手势初始角度存档

            Save_TouchScale = FirstToSecond.magnitude;  //手势向量长度存档

            Calculation_Scale = TouchObject.localScale; //缩放位置赋值

            //触摸中心到本物体的向量存档 = 真实位置- 触摸中心位置存档;
            Save_TouchCenterToTransform_Position = (Vector2)TouchObject.localPosition - Save_TouchCenterPointer;

            //手势向量角度与本物体角度差值存档 = 数学类.计算角度差(触摸向量角度存档,物体真实角度);
            Save_TouchToTransform_Angle = Mathf.DeltaAngle(Save_TouchAngle, TouchObject.localEulerAngles.z);

            OnDrag(eventData);

            if (TouchMotor != null)
            {
                TouchMotor.TouchOnDown(Calculation_Position, Calculation_Angle, Calculation_Scale);
            }
        }
Ejemplo n.º 6
0
        // OnPointerExit,OnPointerUp
        public void OnPointerUp(PointerEventData eventData)//抬起事件
        {
            if (!TouchPool.ContainsKey(eventData.pointerId))
            {
                return;
            }
            if (IgnoreMouse && eventData.pointerId < 0)
            {
                return;                                        //忽略鼠标
            }
            if (TouchPool.Count < TouchLimit.x || TouchPool.Count > TouchLimit.y)
            {
                return;                                                                  //触摸限制
            }
            RemoveTouchData(eventData);

            TouchScreening();                                //稳定点筛选

            FirstToSecond      = Touch_Second - Touch_First; //当前手势向量
            FirstToSecond_Last = FirstToSecond;              //上一次的手势向量

            //===================================

            TouchCenterPointer      = Touch_First + FirstToSecond * 0.5f; //当前手势中心点位置
            Save_TouchCenterPointer = TouchCenterPointer;                 //手势中心位置存档

            //当前手势向量角度 = 角度计算类.角度转换正负无限数值转换为正360度角(角度计算类.获得两个二维向量的角度差(二维向量.上,当前手势的向量,轴方向翻转));
            TouchAngle = SS_EulerAngleConversion.Angle_PN_To_P360(SS_EulerAngleConversion.Get_Angle_In_Vector2Deviation(Vector2.up, FirstToSecond, false));

            Save_TouchAngle = TouchAngle;              //手势初始角度存档

            Save_TouchScale = FirstToSecond.magnitude; //手势向量长度存档

            //触摸中心到本物体的向量存档 =虚拟计算位置 - 触摸中心位置存档;
            Save_TouchCenterToTransform_Position = Calculation_Position - Save_TouchCenterPointer;

            //手势向量角度与本物体角度差值存档 = 数学类.计算角度差(触摸向量角度存档,虚拟计算角度);
            Save_TouchToTransform_Angle = Mathf.DeltaAngle(Save_TouchAngle, Calculation_Angle);

            if (TouchMotor != null && TouchPool.Count < 1)
            {
                TouchMotor.TouchOnEndUp(Calculation_Position, Calculation_Angle, Calculation_Scale);
            }
        }
Ejemplo n.º 7
0
        public void OnDrag(PointerEventData eventData)//拖拽事件
        {
            if (IgnoreMouse && eventData.pointerId < 0)
            {
                return;                                        //忽略鼠标
            }
            if (TouchPool.Count < TouchLimit.x || TouchPool.Count > TouchLimit.y)
            {
                return;                                 //触摸限制
            }
            TouchScreening();                           //稳定点筛选

            FirstToSecond = Touch_Second - Touch_First; //手势向量计算

            //===================================

            TouchCenterPointer = Touch_First + FirstToSecond * 0.5f;//手势中心点位置

            if (TouchCenterPointer_Last - TouchCenterPointer != Vector2.zero)
            {
                TouchDragAngle = SS_EulerAngleConversion.Get_Angle_In_Vector2(TouchCenterPointer_Last - TouchCenterPointer);
            }


            if (TouchAngleLimit.Count > 0)
            {
                for (int i = 0; i < TouchAngleLimit.Count; i++)
                {
                    if (SS_Mathf.If_IntervalAngle(TouchDragAngle, TouchAngleLimit[i].x, TouchAngleLimit[i].y))
                    {
                        break;
                    }

                    if (i == TouchAngleLimit.Count - 1)
                    {
                        DragAngleLimit = true;
                    }
                }
            }

            if (!DragAngleLimit)
            {
                //当前手势向量角度 = 角度计算类.角度转换正负无限数值转换为正360度角(角度计算类.获得两个二维向量的角度差(二维向量.上,当前手势的向量,轴方向翻转));
                TouchAngle = SS_EulerAngleConversion.Angle_PN_To_P360(SS_EulerAngleConversion.Get_Angle_In_Vector2Deviation(Vector2.up, FirstToSecond, false));

                //缩放后的大小
                if ((Zoom && !Mobile) || (Zoom && TouchPool.Count > 1))
                {
                    //缩放比例差值 = ((当前手势向量长度-上一次手势向量长度)/上一次手势向量长度)
                    TouchScale = ((FirstToSecond.magnitude - FirstToSecond_Last.magnitude) / FirstToSecond_Last.magnitude);

                    //缩放后的虚拟计算大小 += 缩放比例差值 * 当前虚拟大小;
                    Calculation_Scale += TouchScale * Calculation_Scale;

                    //缩放后的 触摸点到物体中心向量的存档 += 缩放比例差值 * 触摸点到物体中心向量的存档
                    if (Mobile)
                    {
                        Save_TouchCenterToTransform_Position += TouchScale * Save_TouchCenterToTransform_Position;
                    }
                }

                //移动后的虚拟计算位置 = 触摸中心点 + 触摸中心点到物体中心向量存档;
                if (Mobile)
                {
                    Calculation_Position = TouchCenterPointer + Save_TouchCenterToTransform_Position;
                }


                //旋转后的虚拟计算位置 = 角度计算类.获取_位置_环绕旋转(环绕物:虚拟计算位置,环绕中心点:当前触摸手势中心点,轴向:世界坐标.z轴 ,旋转角度:数学类.获取角度差(手势角度存档,当前手势角度));
                if (Mobile && Rotation)
                {
                    Calculation_Position = SS_EulerAngleConversion.Get_Vector3_RotateRound(Calculation_Position, TouchCenterPointer, Vector3.forward, Mathf.DeltaAngle(Save_TouchAngle, TouchAngle));
                }

                //物体旋转后的虚拟计算角度 = 手势角度与物体角度差存档 + 当前手势角度
                if (Rotation)
                {
                    Calculation_Angle = Save_TouchToTransform_Angle + TouchAngle;
                }
            }

            DragAngleLimit = false;

            //更新双指的向量值

            FirstToSecond_Last = FirstToSecond;

            TouchCenterPointer_Last = TouchCenterPointer;


            if (TouchMotor != null)
            {
                TouchMotor.TouchOnDrag(Calculation_Position, Calculation_Angle, Calculation_Scale);
            }
        }
Ejemplo n.º 8
0
 /// <summary>
 /// 设置电机目标角度和当前角度
 /// </summary>
 /// <param name="vector2">角度向量</param>
 /// <returns>电机</returns>
 public SD_Motor_Angle Set_MotorValue_Vector(Vector2 vector2)
 {
     MotorTarget = SS_EulerAngleConversion.Get_Angle_In_Vector2(vector2);
     MotorSave   = MotorTarget;
     return(this);
 }