Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试围绕固定点旋转对象_C#_Unity3d_Mobile - Fatal编程技术网

C# 尝试围绕固定点旋转对象

C# 尝试围绕固定点旋转对象,c#,unity3d,mobile,C#,Unity3d,Mobile,我正在开发一款手机游戏,我想通过在屏幕上上上下移动手指,将红色圆圈绕着黑色圆圈旋转,以圆圈的中心为参照。我已经写了一个代码,但我有一个问题,当我改变手指的运动方向太快时,它不会改变红色圆圈的运动方向。(蓝色圆圈代表手指,这两个箭头代表它的运动方向)。希望你明白我想说的话 这是我的密码: private Vector3 fp; //First touch position private Vector3 lp; //Last touch position private float

我正在开发一款手机游戏,我想通过在屏幕上上上下移动手指,将红色圆圈绕着黑色圆圈旋转,以圆圈的中心为参照。我已经写了一个代码,但我有一个问题,当我改变手指的运动方向太快时,它不会改变红色圆圈的运动方向。(蓝色圆圈代表手指,这两个箭头代表它的运动方向)。希望你明白我想说的话

这是我的密码:

 private Vector3 fp;   //First touch position
 private Vector3 lp;   //Last touch position
 private float dragDistance;  //minimum distance for a swipe to be registered
 public static float movement = 0f; //direction

 void Start()
 {
     movement = 0f;
     dragDistance = Screen.height * 1 / 100; //dragDistance is 1% height of the screen
 }
 void Update()
 {
     if (Input.touchCount == 1) 
     {
         Touch touch = Input.GetTouch(0); 
         if (touch.phase == TouchPhase.Began) 
         {
             fp = touch.position;
             lp = touch.position;
         }
         else if (touch.phase == TouchPhase.Moved)
         {
             moveSpeed = Input.touches[0].deltaPosition.magnitude / Input.touches[0].deltaTime;

             lp = touch.position;
             if (Mathf.Abs(lp.y - fp.y) > dragDistance)
             {      

                     if (lp.y > fp.y) 
                     {   //Up swipe
                         movement = -1f;
                     }
                     else
                     {   //Down swipe
                         movement = 1f;
                     }            
             }
             if(lp.y > 0)
             {
                 if (Input.touches[0].deltaPosition.magnitude < lp.y)
                     movement *= -1f;
             }
             if (lp.y < 0)
                 if (Input.touches[0].deltaPosition.magnitude > lp.y)
                     movement *= -1f;

         }
         else if(touch.phase == TouchPhase.Stationary)
         {
             movement = 0f;
             fp = touch.position;
             lp = touch.position;
         }
         else if (touch.phase == TouchPhase.Ended) 
         {
             lp = touch.position;  
             movement = 0f;
         }
     }
 }
 private void FixedUpdate()
 {
      transform.RotateAround(Vector3.zero, Vector3.forward, movement * Time.fixedDeltaTime * -moveSpeed);
 }
private vector3fp//第一触位
私人矢量3有限公司//最后触摸位置
私人浮动牵引距离//要注册的刷卡最小距离
公共静态浮动运动=0f//方向
void Start()
{
运动=0f;
dragDistance=Screen.height*1/100;//dragDistance是屏幕高度的1%
}
无效更新()
{
如果(Input.touchCount==1)
{
Touch-Touch=Input.GetTouch(0);
if(touch.phase==TouchPhase.start)
{
fp=触摸位置;
lp=触摸位置;
}
else if(touch.phase==TouchPhase.Moved)
{
moveSpeed=Input.Touchs[0]。deltaPosition.magnitude/Input.Touchs[0]。deltaTime;
lp=触摸位置;
如果(数学绝对值(lp.y-fp.y)>牵引距离)
{      
如果(lp.y>fp.y)
{//向上滑动
移动=-1f;
}
其他的
{//向下滑动
运动=1f;
}            
}
如果(lp.y>0)
{
if(Input.touchs[0].deltaPosition.magnitylp.y)
运动*=-1f;
}
否则如果(touch.phase==touch.phase.stative)
{
运动=0f;
fp=触摸位置;
lp=触摸位置;
}
否则如果(touch.phase==TouchPhase.end)
{
lp=触摸位置;
运动=0f;
}
}
}
私有void FixedUpdate()
{
transform.RotateAround(Vector3.zero,Vector3.forward,movement*Time.fixedDeltaTime*-moveSpeed);
}

如果我理解正确,手指直接控制旋转,而不是旋转速度

如果是这样,我建议保存初始旋转,并简单地使用从初始触摸位置到当前触摸位置的y值差来产生新的旋转。即,创建原始变换的副本并旋转该副本,覆盖上一帧的变换


我在应用三角旋转时遇到了问题,因为小错误会累积。因此,如果您开始疯狂地拖动手指,旋转可能会开始表现出奇怪的行为,并且在将手指返回到原始位置时不会返回到中性。我不确定这是否是您遇到的实际问题,这更像是一个一般性建议。

这正是我的问题。如果我开始疯狂地拖动手指,旋转不会改变,除非我将手指返回到原始位置或调用“静止”状态,否则手指也会控制旋转速度。@cristi19我希望移动速度和移动不是零,因此至少会产生一些旋转。但我无法在代码中发现问题。您可能需要进行一些调试,以检查这些值实际上是什么。我仍然建议在拖动时始终使用初始状态和当前状态,而不要使用任何中间状态。