Unity3d 统一真实感加速度计控制
我有上面的代码来垂直移动我的游戏对象(沿y轴)。这很好,除了我希望对象相对于我的运动移动,即 如果我将手机倾斜X数量非常快,它将移动距离Z,而如果我将手机倾斜X数量但速度较慢,则距离将为A,其中Z>A 我试着让当前读数从之前的读数中减去它,然后与其他读数相乘,但除了造成抖动效果外,它并没有完全按照我想要的那样工作 有人能帮我做到这一点吗?我对团结是个新手Unity3d 统一真实感加速度计控制,unity3d,3d,accelerometer,Unity3d,3d,Accelerometer,我有上面的代码来垂直移动我的游戏对象(沿y轴)。这很好,除了我希望对象相对于我的运动移动,即 如果我将手机倾斜X数量非常快,它将移动距离Z,而如果我将手机倾斜X数量但速度较慢,则距离将为A,其中Z>A 我试着让当前读数从之前的读数中减去它,然后与其他读数相乘,但除了造成抖动效果外,它并没有完全按照我想要的那样工作 有人能帮我做到这一点吗?我对团结是个新手 谢谢您的lerp代码不正确 Lerp根据一段时间内的开始和结束矢量3返回矢量3。Input.acceleration是矢量3数据类型,是的,但
谢谢您的lerp代码不正确 Lerp根据一段时间内的开始和结束矢量3返回矢量3。Input.acceleration是矢量3数据类型,是的,但它不是世界位置。它是加速计的当前值 您需要使用Input.acceleration值从当前transform.position创建一个结束世界位置(假设此组件已附加到要在场景中控制的对象)。一旦有了该端点,将transform.position设置为等于Lerp结果 基于游戏的轴和设备方向等。。。加速度值可能不会将X映射到X、Y映射到Y、Z映射到Z。您需要稍微使用它才能正确计算终点 例如,我使用刚体物理,但加速度计Y控制X平移:
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);
}
您的lerp代码不正确 Lerp根据一段时间内的开始和结束矢量3返回矢量3。Input.acceleration是矢量3数据类型,是的,但它不是世界位置。它是加速计的当前值 您需要使用Input.acceleration值从当前transform.position创建一个结束世界位置(假设此组件已附加到要在场景中控制的对象)。一旦有了该端点,将transform.position设置为等于Lerp结果 基于游戏的轴和设备方向等。。。加速度值可能不会将X映射到X、Y映射到Y、Z映射到Z。您需要稍微使用它才能正确计算终点 例如,我使用刚体物理,但加速度计Y控制X平移:
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);
}
我建议您查看一下,这应该能够帮助您了解如何使加速计提供可用于控制速度的数字输入。希望这能有所帮助。我建议您看看,这应该能够帮助您了解如何使加速计提供可用于控制速度的数字输入。希望这有帮助。使用下面的代码来完成此操作。完美模拟加速度计
rigidbody.AddRelativeForce(
Input.acceleration.y * StrafingSpeed,
0.0f,
0.0f,
ForceMode.VelocityChange
);
使用下面的代码执行此操作。完美模拟加速度计
rigidbody.AddRelativeForce(
Input.acceleration.y * StrafingSpeed,
0.0f,
0.0f,
ForceMode.VelocityChange
);
我也在做类似的事情。目前,我正在检查
Input.acceleration.z
是什么。如果设备平放在桌子上,则该值为1.0。下面是加速度数据工作原理的一个很好的解释:我正在做类似的事情。目前,我正在检查Input.acceleration.z
是什么。如果设备平放在桌子上,则该值为1.0。以下是加速度数据如何工作的一个很好的解释: