/// <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); }
/// <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); }
/// <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); }
/// <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); }
// 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); } }
// 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); } }
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); } }
/// <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); }