0

我有一个球体,我想根据倾斜(Input.acceleration)改变重力(在 X 和 Z 中)。但它不起作用。为了改变重力,我使用以下代码:

if((Input.acceleration.x) > 0)
    {
        Physics.gravity = new Vector3(9.81f, 0, 0);
    }
    if((Input.acceleration.x) < 0)
    {
        Physics.gravity = new Vector3(-9.81f, 0, 0);
    } 

对于 Z:if((Input.acceleration.y) > 0) { Physics.gravity = new Vector3(0, 0, 9.81f); } if((Input.acceleration.y) < 0) { Physics.gravity = new Vector3(0, 0, -9.81f); }

我在 FixedUpdate 函数中编写这些代码。谁能告诉我我在哪里犯错?我也是统一的新手。

4

2 回答 2

0

如果我从评论中正确理解,您的问题是重力正在起作用,但一次只能在一个轴(x 或 z)上。为了让重力一次同时作用于多个轴,请尝试以下代码:

Vector3 newGravity = Physics.gravity;
if((Input.acceleration.x) > 0)
    {
        newGravity.x = 9.81f;
    }
else if((Input.acceleration.x) < 0)
    {
        newGravity.x = -9.81f;
    }
else
    {
        newGravity.x = 0;
    }

if((Input.acceleration.y) > 0)
    {
        newGravity.y = 9.81f;
    }
else if((Input.acceleration.y) < 0)
    {
        newGravity.y = -9.81f;
    }
else
    {
        newGravity.y = 0;
    }

if((Input.acceleration.z) > 0)
    {
        newGravity.z = 9.81f;
    }
else if((Input.acceleration.z) < 0)
    {
        newGravity.z = -9.81f;
    }
else
    {
        newGravity.z = 0;
    }

Physics.gravity = newGravity;

然而,即使是很小的倾斜,这也会产生最大的重力。如果您希望重力根据倾斜角度逐渐增加,则需要将 9.81f 乘以一个变量。

于 2013-03-29T11:48:50.987 回答
0

对此的评价为零,而它又是从 Unity iOS 示例中提取的(链接在我链接的论坛帖子中),该示例似乎不再存在:

public float force = 9.8f;
void FixedUpdate ()
{
    Vector3 dir = new Vector3(Input.acceleration.x,0.0f,Input.acceleration.y);
    Physics.gravity = dir * force;
}
于 2013-04-02T20:11:13.833 回答