2016-06-18 154 views
0

我想左倾我的对象或右取决于哪一方,我倾我的手机,而对象向前走,这里是我的代码不能正常工作..倾斜团结

void Update() { 
    transform.Translate(Vector3.forward * Time.deltaTime); 
    if (Input.acceleration.x > 1) { 
     transform.Rotate(90,0,0); 
    } 
    else if (Input.acceleration.x < -1) { 
     transform.Rotate(-90,0,0); 
    } 

任何有帮助的将不胜感激。谢谢。

+0

您是否在我的答案中测试了代码? – Programmer

回答

0

使用这些来代替:

private Quaternion localRotation; 
public float speed = 1.0f; 
void Start() 
{ 
localRotation = transform.rotation; 
} 
void Update() 
{ 
float curSpeed = Time.deltaTime * speed; 

localRotation.y += Input.acceleration.x * curSpeed; 
localRotation.x += Input.acceleration.y * curSpeed; 

transform.rotation = localRotation; 
} 

为gamedev q &一个:stackexchange gamedev

+0

谢谢,但它不工作。 –

1

你必须smooth使用前加速度计数据。否则,在倾斜设备时GameObect会发抖或发出噪音。

你只需要用Quaternion.Euler将加速度计值转换为Quaternion,然后直接将值分配给GameObect的transform.localRotation

int MIN = 0; 
int MAX = 100; 
public bool flipDirection = false; 
public bool smoothAccelerometer = true; 

float defaultZValue; 

//Filter Accelerometer 
float AccelerometerUpdateInterval = 1.0f/30.0f; 
float LowPassKernelWidthInSeconds = 1.0f; 
float LowPassFilterFactor = 0; 
Vector3 lowPassValue = Vector3.zero; 

void Start() 
{ 
    defaultZValue = transform.position.z; 

    //Filter Accelerometer 
    LowPassFilterFactor = AccelerometerUpdateInterval/LowPassKernelWidthInSeconds; 
    lowPassValue = Input.acceleration; 
} 


void Update() 
{ 
    //Move Object 
    transform.Translate(Vector3.forward * Time.deltaTime); 

    //Get smoothed Accelerometer value values (pass in false to use raw Accelerometer values) 
    Vector3 dir = LowPassFilterAccelerometer(smoothAccelerometer); 

    if (Input.deviceOrientation == DeviceOrientation.LandscapeLeft || Input.deviceOrientation == DeviceOrientation.LandscapeRight) 
    { 
     //Check if right 
     if (dir.x > 0) 
     { 
      float angle = mapValue(dir.x, 0f, 1f, MIN, MAX); 
      if (flipDirection) 
      { 
       angle = angle * -1; 
      } 
      transform.localRotation = Quaternion.Euler(0, 0, angle); 
     } 
     //Check if left 
     else if (dir.x < 0) 
     { 
      float angle = mapValue(dir.x, -0f, -1f, -MIN, -MAX); 
      if (flipDirection) 
      { 
       angle = angle * -1; 
      } 
      transform.localRotation = Quaternion.Euler(0, 0, angle); 
     } 
     //Middle(No direction) 
     else 
     { 
      //Use Default Angle 
      transform.localRotation = Quaternion.Euler(0, 0, defaultZValue); 
     } 
    } 
} 

float mapValue(float mainValue, float inValueMin, float inValueMax, float outValueMin, float outValueMax) 
{ 
    return (mainValue - inValueMin) * (outValueMax - outValueMin)/(inValueMax - inValueMin) + outValueMin; 
} 

//Filter Accelerometer 
Vector3 LowPassFilterAccelerometer(bool smooth) 
{ 
    if (smooth) 
     lowPassValue = Vector3.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor); 
    else 
     lowPassValue = Input.acceleration; 

    return lowPassValue; 
} 
+0

**注意**:如果它不工作,说什么不工作。不要只说它不工作。这对我没有帮助。 – Programmer

+0

对不起,我已经检查了它,而不是倾斜。 –