Vector3 acc = Vector3.Zero;
void update(){
acc = Vector3.Lerp(acc, Input.acceleration, Time.deltaTime);
transform.position = new Vector3(transform.position.x, (acc * -aVerticalRotation).x, transform.position.z);
}
我有上面的代码来垂直移动我的GameObject(沿着y轴)。除了我希望对象相对于我的运动移动,即
之外,这种方法很好如果我将手机的某个X量非常快地倾斜,它将移动距离Z,而如果我倾斜手机的数量为X但速度较慢,则距离为A,其中Z>甲
我试图将当前的读数从之前的读数中减去并将其与其余读数相乘,但除了引起抖动效应之外,它并不像我想要的那样完全正常工作。
有人可以帮助我实现这个目标吗?我是Unity的新手。
由于
答案 0 :(得分:1)
您的lerp代码不正确。
Lerp根据开始和结束vector3随时间返回vector3。 Input.acceleration是Vector3数据类型,是的,但它不是世界位置。它是加速度计的当前值。
您需要使用Input.acceleration值从当前transform.position创建一个end world位置(假设此组件附加到您想要在场景中控制的对象)。然后,一旦有了该终点,将transform.position设置为等于Lerp结果。
根据您的游戏轴和设备方向等...加速度值可能不会将X映射到X,Y到Y,Z到Z.您需要稍微玩一下才能正确计算结束点。
例如,我使用刚体物理,但我的加速度计Y控制我的X平移:
rigidbody.AddRelativeForce(
Input.acceleration.y * StrafingSpeed,
0.0f,
0.0f,
ForceMode.VelocityChange
);
答案 1 :(得分:0)
使用以下代码执行此操作。完美模拟加速度计。
rotFix = new Quaternion(Input.gyro.attitude.x, Input.gyro.attitude.y, -Input.gyro.attitude.z, -Input.gyro.attitude.w);
transform.localRotation = rotFix;
答案 2 :(得分:-1)
我建议你看看 here ,这应该可以帮助你找到如何使加速度计提供可用于控制速度的数字输入。希望这会有所帮助。