1

我想使用 Accelerometer 和 Unity 开发 2D 赛车游戏。传感器将使汽车像这个图一样向左或向右旋转。 在此处输入图像描述

当我将智能手机向右翻转时,汽车将向右转,当我向左翻转时,汽车将向左转。翻转智能手机时,我使用加速度计传感器来转动汽车。

我的代码:

    public class accel : MonoBehaviour 
    {
        public MoveController mc;
        void Update () 
            {
                transform.Translate(0,-Input.acceleration.x, 0);
                if (Input.acceleration.x > 0) {
                    mc.degree -= 10;
                    mc.derajat-=10;
                }
                else if (Input.acceleration.x < -0) {
                    mc.degree += 10;
                    mc.derajat+=10;
                }
                else {
                    mc.degree += 0;
                    mc.derajat+= 0;
                }
            }
}

类移动控制器:

using UnityEngine;
using System.Collections;

public class MoveController : MonoBehaviour {

    public bool stop = false;
    public enum ButtonList {left,right,forward,stop};
    public float currspeed = 1.0f;
    public float acceleration = 5f;
    public float maxspeed = 12f;
    public float degree = 10f;
    public float derajat = 10f;
    public bool jalan;
    public Camera camera;
    public SpriteRenderer redcar;
    public float sudut;

    public void setActiveStop() {
        stop = true;
    }

    public void setUnactiveStop() {
        stop = false;
    }

    public bool getStop() {
        return stop;
    }

    public bool getNotStop() {
        return !stop;
    }

    void Start () {
        this.setUnactiveStop ();    
        jalan = false;

    }

    // Update is called once per frame
    void Update () {
        this.start_game (); 

    }

    public void start_game() {
        if (getNotStop()) {
            redcar.transform.rotation=Quaternion.Euler(0,0,degree);
            camera.transform.rotation=Quaternion.Euler(0,0,derajat);

            sudut=redcar.transform.rotation.z;
            redcar.transform.Translate((currspeed*Mathf.Cos(sudut*Mathf.PI/180))*1*Time.deltaTime,
                                       (currspeed*Mathf.Sin(sudut*Mathf.PI/180))*1*Time.deltaTime,
                                       0);
            camera.transform.Translate((currspeed*Mathf.Cos(sudut*Mathf.PI/180))*1*Time.deltaTime,
                                       (currspeed*Mathf.Sin(sudut*Mathf.PI/180))*1*Time.deltaTime,
                                       0);

        }
        jalan = true;

    }
}

当我在我的智能手机中构建和运行时,汽车不会停止旋转,而且它的旋转速度太快。我想Update在第一个代码中修改函数,以使汽车可以平稳地左右旋转/左右转动。

那么,如何解决呢?

4

1 回答 1

2

目前您的问题是,除非加速度计正好为 0,否则您将每帧向右或向左转动 10 度。此外,每帧增加或减少 10 度也是您转动过快的原因。

一种方法是设置一个您不转向的阈值。这可以通过更改您比较的值来完成Input.acceleration.x。我还更改了您使用的每一帧旋转的角度Time.deltaTime

完成最后一帧所需的时间(以秒为单位)(只读)。使用此功能可以使您的游戏帧率独立。

这意味着所有汽车在所有设备上都应该以相同的速度转动。

下面我对您的更新功能进行了一些更新。您将需要使用SPEEDTHRESHOLD变量来让转弯感觉正确。

SPEED: 汽车转弯的速度

THRESHOLD:在转弯开始之前设备需要倾斜多远

public class accel : MonoBehaviour 
{
    public MoveController mc;
    private float SPEED = 0.5;
    private float THRESHOLD = 0.3;
    void Update () 
    {
        transform.Translate(0,-Input.acceleration.x, 0);
        if (Input.acceleration.x > THRESHOLD) {
            mc.degree -= Time.deltaTime * SPEED;
            mc.derajat-= Time.deltaTime * SPEED;
        }
        else if (Input.acceleration.x < -THRESHOLD) {
            mc.degree += Time.deltaTime * SPEED;
            mc.derajat+= Time.deltaTime * SPEED;
        }
    }
}
于 2015-08-02T19:19:46.760 回答