Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
Visual studio 多角度范围内的统一数学夹具_Visual Studio_Unity3d_Rotation_2d_Euler Angles - Fatal编程技术网

Visual studio 多角度范围内的统一数学夹具

Visual studio 多角度范围内的统一数学夹具,visual-studio,unity3d,rotation,2d,euler-angles,Visual Studio,Unity3d,Rotation,2d,Euler Angles,我想将箭头移动的区域限制在-140和-40度之间,如图所示,但由于角度区域中的角度分布很奇怪,如果我将其分别限制在-140和-40之间,作为最小值和最大值,它只允许我将箭头移动到红色区域,而不是所需区域,我的意思是,我只想在非红色区域移动箭头,如果有人能帮助我从这个代码开始而不做太多更改,我将非常感激,谢谢 编辑:添加了基于条件的临时代码 Vector3差异=Camera.main.ScreenToWorldPoint(Input.mousePosition)-transform.positi

我想将箭头移动的区域限制在-140和-40度之间,如图所示,但由于角度区域中的角度分布很奇怪,如果我将其分别限制在-140和-40之间,作为最小值和最大值,它只允许我将箭头移动到红色区域,而不是所需区域,我的意思是,我只想在非红色区域移动箭头,如果有人能帮助我从这个代码开始而不做太多更改,我将非常感激,谢谢

编辑:添加了基于条件的临时代码

Vector3差异=Camera.main.ScreenToWorldPoint(Input.mousePosition)-transform.position;
差异。规范化();
浮动旋转Z=数学Atan2(差分y,差分x)*数学Rad2Deg;
//旋转Z=数学夹具(旋转Z,-140,180);
if(rotationZ-140){rotationZ=-140;}
如果(rotationZ>-90&&rotationZ<-40){rotationZ=-40;}
transform.rotation=Quaternion.Euler(0f,0f,rotationZ);
Log(rotationZ);
如果(旋转Z<-90 | |旋转Z>90)
{
if(rotationZ-140){rotationZ=-140;}
如果(rotationZ>-90&&rotationZ<-40){rotationZ=-40;}
if(myPlayer.transform.eulerAngles.y==0)
{
transform.localRotation=Quaternion.Euler(180,0,-rotationZ);
}
else if(myPlayer.transform.eulerAngles.y==180)
{
transform.localRotation=Quaternion.Euler(180,180,-rotationZ);
}
}
}
}
void FixedUpdate()
{
Vector3差异=Camera.main.ScreenToWorldPoint(Input.mousePosition)
-变换位置;
差异。规范化();
浮动旋转Z=数学Atan2(差分y,差分x)*
Mathf.Rad2Deg;
if(rotationZ-140){rotationZ=-140;}
else如果(rotationZ>-90&&rotationZ<-40){rotationZ=-40;}
transform.rotation=Quaternion.Euler(0f,0f,rotationZ);
如果(旋转Z<-90 | |旋转Z>90)
{
if(rotationZ-140){rotationZ=-140;}
else如果(rotationZ>-90&&rotationZ<-40){rotationZ=-40;}
if(myPlayer.transform.eulerAngles.y==0)
{
transform.localRotation=Quaternion.Euler(180,0,-
旋转z);
}
else if(myPlayer.transform.eulerAngles.y==180)
{
transform.localRotation=Quaternion.Euler(180,180,-
旋转z);
}
}
}
}
专用只读浮点死区=Mathf.Sin(-40*Mathf.Deg2Rad);
私有向量3 RightDedZoneEnd=新向量3(数学Cos(-40*Mathf.Deg2Rad),数学Sin(-40*Mathf.Deg2Rad),0);
私有向量3 leftDeadZoneEnd=新向量3(数学Cos(-140*Mathf.Deg2Rad),数学Sin(-140*Mathf.Deg2Rad),0);
私有void更新()
{
Vector2方向=Camera.main.ScreenToWorldPoint(Input.mousePosition)-transform.position;
方向。规范化();
if(y方向<死区)
{
如果(方向x>=0)
{
方向=右死区;
}
其他的
{
方向=左死区;
}
}
如果(方向x<0)
{
transform.localScale=新向量3(1,-1,1);
}
其他的
{
transform.localScale=Vector3.1;
}
方向=四元数。欧拉(0,0,90)*方向;
transform.localRotation=Quaternion.LookRotation(Vector3.forward,direction);
}

这是一款3D游戏,它的功能就像在铁锈上按Alt键环顾四周,所以Characterized不会向后看180度吗?我不喜欢这个代码,但至少你可以使用
如果(rotationZ-140){rotationZ=-140;}如果(rotationZ>-90&&rotationZ<-40){rotationZ=-40;}
@Whitebrim你会做什么?我对学习更有效的方法感兴趣。我附上完整的代码,因为还有一部分我改变了图像的旋转,使其成为镜像版本220@Antoine是的,但这是一个圆度方程,只是一个简单的技巧,通过360度的加减转换,也就是说220等于-140,此转换将使箭头在非红色区域从-140移动到-40。试试旋转Z=Mathf.Clamp(旋转Z,-40220);
    Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
    difference.Normalize();
    float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
    //rotationZ = Mathf.Clamp(rotationZ, -140, 180);
    if (rotationZ <= -90 && rotationZ > -140) { rotationZ = -140; }
    if (rotationZ > -90 && rotationZ < -40) { rotationZ = -40; }
    transform.rotation = Quaternion.Euler(0f, 0f, rotationZ);
    
    Debug.Log(rotationZ);
    if (rotationZ < -90 || rotationZ > 90)
        {

        if (rotationZ <= -90 && rotationZ > -140) { rotationZ = -140; }
        if (rotationZ > -90 && rotationZ < -40) { rotationZ = -40; }
        if (myPlayer.transform.eulerAngles.y == 0)
            {

                transform.localRotation = Quaternion.Euler(180, 0, -rotationZ);


            }
            else if (myPlayer.transform.eulerAngles.y == 180)
            {
                transform.localRotation = Quaternion.Euler(180, 180, -rotationZ);
            }


        }
    }
}
    void FixedUpdate()
    {
        
        Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) 
        - transform.position;
        difference.Normalize();
        float rotationZ = Mathf.Atan2(difference.y, difference.x) * 
        Mathf.Rad2Deg;

        if (rotationZ <= -90 && rotationZ > -140) { rotationZ = -140; }
        else if (rotationZ > -90 && rotationZ < -40) { rotationZ = -40; }

        transform.rotation = Quaternion.Euler(0f, 0f, rotationZ);

        if (rotationZ < -90 || rotationZ > 90)
        {
            if (rotationZ <= -90 && rotationZ > -140) { rotationZ = -140; }
            else if (rotationZ > -90 && rotationZ < -40) { rotationZ = -40; }

            if (myPlayer.transform.eulerAngles.y == 0)
            {
                    transform.localRotation = Quaternion.Euler(180, 0, - 
                    rotationZ);
            }
            else if (myPlayer.transform.eulerAngles.y == 180)
            {
                    transform.localRotation = Quaternion.Euler(180, 180, - 
                    rotationZ);
            }
        }
    }
}