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我希望移动速度和移动不是零,因此至少会产生一些旋转。但我无法在代码中发现问题。您可能需要进行一些调试,以检查这些值实际上是什么。我仍然建议在拖动时始终使用初始状态和当前状态,而不要使用任何中间状态。