通过在Unity3D中倾斜设备控制球的移动

时间:2016-08-08 20:26:14

标签: unity3d unityscript unity5

我使用以下脚本来控制球,但它并没有完全符合我的要求。 我们的3D游戏将以横向模式播放,右侧设备的主页按钮(或底部)。向左倾斜(不转动)设备应使球滚动向左倾斜,向右倾斜应使其向右滚动。向下倾斜设备(设备顶部向下)应使球滚动更快,向上倾斜设备应使其减慢速度。 我也不希望球无限期加速。

下面的代码要求设备保持笔直而不是平放,并且通过转动设备而不是通过平铺来移动球。

        void FixedUpdate()
    {
        // Player movement in mobile devices
        // Building of force vector 
        Vector3 movement = new Vector3(-Input.acceleration.x, 0.0f, -Input.acceleration.z);
        // Adding force to rigidbody
        var move = movement * speed * Time.deltaTime;
        rigidbdy.AddForce(move);         
    }

1 个答案:

答案 0 :(得分:2)

对于您的倾斜问题,您可能只需要选择(-Input.acceleration.x, 0.0f, -Input.acceleration.z);以外的其他内容in the example in the documentation (-Input.acceleration.y, 0.0f, Input.acceleration.x);进行倾斜控制。

对于最大速度问题,只需在代码中添加对rigidbdy.velocity.magnitude > maxSpeed的检查,如果值最大,则限制值。

public float maxSpeed;
void FixedUpdate()
{
    // Player movement in mobile devices
    // Building of force vector 
    Vector3 movement = new Vector3(-Input.acceleration.y, 0.0f, Input.acceleration.x);
    // Adding force to rigidbody
    var move = movement * speed * Time.deltaTime;
    rigidbdy.AddForce(move);   

    //Limits the max speed
    if(rigidbdy.velocity.magnitude > maxSpeed)
    {
        rigidbdy.velocity = rigidbdy.velocity.normalized * maxSpeed;
    }
}

这将导致速度限制为您在检查器中为maxSpeed设置的任何值。