Unity3d transform.EulerAngles围绕圆的问题
所以我有一个平面圆,当我用我的触摸脚本点击它时,我可以旋转它。但是,如果我最终接触到圆心,它将自己翻转到相反的位置。这有点不可靠。我想这最终是我的数学技能,但如果有人能看一看,我会很感激的Unity3d transform.EulerAngles围绕圆的问题,unity3d,Unity3d,所以我有一个平面圆,当我用我的触摸脚本点击它时,我可以旋转它。但是,如果我最终接触到圆心,它将自己翻转到相反的位置。这有点不可靠。我想这最终是我的数学技能,但如果有人能看一看,我会很感激的 float changeY = 0; // touch position Vector3 pos = touch.worldPos; Vector2 curLineEnd = new Vector2(pos[0], pos[2]); float curLineDistance
float changeY = 0;
// touch position
Vector3 pos = touch.worldPos;
Vector2 curLineEnd = new Vector2(pos[0], pos[2]);
float curLineDistance = GetDistance(new Vector2(lineStart[0], lineStart[1]), curLineEnd);
if (curLineDistance < edgeWidth) {
return;
}
if(curLineDistance < 0.6)
{
float angle = GetAngle(curLineEnd, startLineEnd);
if (angle > lastAngle+2)
{
changeY += 5;
}
else if (angle < lastAngle-2)
{
changeY -= 5;
}
lastAngle = angle;
Debug.Log(angle);
//transform.eulerAngles = new Vector3(270, angle + lastY, 0);
transform.Rotate(new Vector3(0,changeY),Space.World);
}
public float GetAngle(Vector2 lineOneEnd, Vector2 lineTwoEnd)
{
float a = lineOneEnd[0] - lineStart[0];
float b = lineOneEnd[1] - lineStart[1];
float c = lineTwoEnd[0] - lineStart[0];
float d = lineTwoEnd[1] - lineStart[1];
float lineOneTan = Mathf.Atan2(a, b);
float lineTwoTan = Mathf.Atan2(c, d);
float angle = (lineOneTan - lineTwoTan) * 180 / Mathf.PI;
return angle;
}
float changeY=0;
//触位
Vector3位置=touch.worldPos;
Vector2 curLineEnd=新的Vector2(位置[0],位置[2]);
float curLineDistance=GetDistance(新向量2(lineStart[0],lineStart[1]),curLineEnd);
if(卷曲线距离<边长){
返回;
}
如果(卷曲线距离<0.6)
{
浮动角度=GetAngle(curLineEnd、startLineEnd);
如果(角度>最后角度+2)
{
changeY+=5;
}
否则如果(角度
我通过使用Transform做了一些改进。改为使用Rotate。我以前没有使用它的问题是因为我不确定如何操纵角度来增加或减少旋转。我决定创建一个变量,当角度高于上一次传递时,该变量只会增加。然而,它仍然需要一些关于它有多紧的工作。它有点抖动,但远没有以前那么糟糕。你可以通过在系统中安装一点阻尼器来解决抖动问题。包含触摸的变量可能会波动约0.00005。这会引起轻微的震动。若你们这样做的话,它只会识别大于0.05的运动,你们会消除很多抖动。