我想使用 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
在第一个代码中修改函数,以使汽车可以平稳地左右旋转/左右转动。
那么,如何解决呢?