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
C# Unity3D使用加速度旋转地面时震动_C#_Unity3d - Fatal编程技术网

C# Unity3D使用加速度旋转地面时震动

C# Unity3D使用加速度旋转地面时震动,c#,unity3d,C#,Unity3d,我正试图利用重力来滚一个球。我也尝试使用加速度计旋转地面,但地面在旋转时会抖动。我也不能对x轴的旋转设置限制 void Update() { tilt = new Vector3(Input.acceleration.x, Input.acceleration.y, Mathf.Clamp(Input.acceleration.z,-15,15)); tilt = Quaternion.Euler(90, 0, 90) * tilt; // Change Rotation acc

我正试图利用重力来滚一个球。我也尝试使用加速度计旋转地面,但地面在旋转时会抖动。我也不能对x轴的旋转设置限制

void Update()
{
    tilt = new Vector3(Input.acceleration.x, Input.acceleration.y, Mathf.Clamp(Input.acceleration.z,-15,15));
    tilt = Quaternion.Euler(90, 0, 90) * tilt; // Change Rotation according to camera view

    if(tilt.x > 0.05f || tilt.x < -0.05f && tilt.x > -6f || tilt.x < 6f)
    {
        transform.localRotation = new Quaternion(-tilt.x, 0, 0, 3);            
    }

    if (tilt.z < -0.1f || tilt.z >0.1f)
    {
        transform.localRotation = new Quaternion(0, 0, -tilt.z, 3);
    }
}
void Update()
{
倾斜=新矢量3(输入.加速度.x,输入.加速度.y,数学钳位(输入.加速度.z,-15,15));
倾斜=四元数。Euler(90,0,90)*倾斜;//根据摄影机视图更改旋转
如果(倾斜角x>0.05f | |倾斜角x<0.05f和倾斜角x>-6f | |倾斜角x<6f)
{
transform.localRotation=新的四元数(-tilt.x,0,0,3);
}
如果(倾斜z<-0.1f | |倾斜z>0.1f)
{
transform.localRotation=新的四元数(0,0,-tilt.z,3);
}
}

看看这是否有帮助。这是实现角速度的许多方法的一个简单示例

请注意,计算中未考虑Gimbel锁的影响。您可能希望将旋转限制在某个范围内。此外,还需要delta的死区,例如,如果(delta

float speed = 40f;
void Update()
{
    tilt = new Vector3(Input.acceleration.x, Input.acceleration.y, Mathf.Clamp(Input.acceleration.z,-15,15));
    tilt = Quaternion.Euler(90, 0, 90) * tilt; // Change Rotation according to camera view
    if(tilt.x > 0.05f || tilt.x < -0.05f && tilt.x > -6f || tilt.x < 6f)
    {
        var delta = -tilt.x - transform.localRotation.x;
        transform.localRotation += (new Quaternion(delta, 0, 0, 3) * Time.deltaTime * speed);

    }
    if (tilt.z < -0.1f || tilt.z >0.1f)
    {
        var delta = -tilt.z - transform.localRotation.z;
        transform.localRotation += (new Quaternion(0, 0, -tilt.z, 3) * Time.deltaTime * speed);
    }
}
浮动速度=40f;
无效更新()
{
倾斜=新矢量3(输入.加速度.x,输入.加速度.y,数学钳位(输入.加速度.z,-15,15));
倾斜=四元数。Euler(90,0,90)*倾斜;//根据摄影机视图更改旋转
如果(倾斜角x>0.05f | |倾斜角x<0.05f和倾斜角x>-6f | |倾斜角x<6f)
{
var delta=-tilt.x-transform.localRotation.x;
transform.localRotation+=(新的四元数(delta,0,0,3)*Time.deltaTime*速度);
}
如果(倾斜z<-0.1f | |倾斜z>0.1f)
{
var delta=-tilt.z-transform.localRotation.z;
transform.localRotation+=(新的四元数(0,0,-tilt.z,3)*Time.deltaTime*速度);
}
}

看看这是否有帮助。这是实现角速度的许多方法的一个简单示例

请注意,计算中未考虑Gimbel锁的影响。您可能希望将旋转限制在某个范围内。此外,还需要delta的死区,例如,如果(delta

float speed = 40f;
void Update()
{
    tilt = new Vector3(Input.acceleration.x, Input.acceleration.y, Mathf.Clamp(Input.acceleration.z,-15,15));
    tilt = Quaternion.Euler(90, 0, 90) * tilt; // Change Rotation according to camera view
    if(tilt.x > 0.05f || tilt.x < -0.05f && tilt.x > -6f || tilt.x < 6f)
    {
        var delta = -tilt.x - transform.localRotation.x;
        transform.localRotation += (new Quaternion(delta, 0, 0, 3) * Time.deltaTime * speed);

    }
    if (tilt.z < -0.1f || tilt.z >0.1f)
    {
        var delta = -tilt.z - transform.localRotation.z;
        transform.localRotation += (new Quaternion(0, 0, -tilt.z, 3) * Time.deltaTime * speed);
    }
}
浮动速度=40f;
无效更新()
{
倾斜=新矢量3(输入.加速度.x,输入.加速度.y,数学钳位(输入.加速度.z,-15,15));
倾斜=四元数。Euler(90,0,90)*倾斜;//根据摄影机视图更改旋转
如果(倾斜角x>0.05f | |倾斜角x<0.05f和倾斜角x>-6f | |倾斜角x<6f)
{
var delta=-tilt.x-transform.localRotation.x;
transform.localRotation+=(新的四元数(delta,0,0,3)*Time.deltaTime*速度);
}
如果(倾斜z<-0.1f | |倾斜z>0.1f)
{
var delta=-tilt.z-transform.localRotation.z;
transform.localRotation+=(新的四元数(0,0,-tilt.z,3)*Time.deltaTime*速度);
}
}

不要像您那样设置
localRotation
。计算每帧的倾斜差并实现速度机制我需要使用哪种机制我尝试了使用transform。旋转,它们我的游戏对象将开始自动旋转如何修复它无论你使用哪种旋转方法,你也可以使用
localRotation
。重点是你需要逐渐地改变它。你能解释得更清楚一些吗,或者给我看一些演示代码,我尝试了很多方法,但没有得到正确的结果。它总是开始摇晃。不要像你那样设置
localRotation
。计算每帧的倾斜差并实现速度机制我需要使用哪种机制我尝试了使用transform。旋转,它们我的游戏对象将开始自动旋转如何修复它无论你使用哪种旋转方法,你也可以使用
localRotation
。重点是你需要逐渐地改变它。你能解释得更清楚一些吗,或者给我看一些演示代码,我尝试了很多方法,但没有得到正确的结果。它总是开始摇晃。