Unity 2D手机游戏:如何使世界引力跟随设备倾斜

时间:2016-04-08 05:23:20

标签: c# android unity3d unity3d-2dtools

我知道这可能是Unity开发人员的一个基本问题。但我正在努力寻找这个问题的答案。我想根据设备加速移动游戏画面中的所有对象。我只想到两种可能的解决方案:

第一:根据设备倾斜改变整个世界的重力

第二:将力施加到所有物体或改变所有物体的速度(我尝试改变速度,但游戏滞后)

有没有什么好方法可以让2D游戏对象根据设备倾斜顺畅移动?

3 个答案:

答案 0 :(得分:0)

您可以通过修改Physics2D.gravity来执行此操作。它将改变场景中所有GameObject的重力。

Physics2D.gravity = Input.acceleration * 50;会起作用,但由于Input.acceleration具有低,中,高值,因此无效。因此,您无法直接将Input.acceleration分配给Physics2D.gravity

您需要打开设备,然后使用Debug.Log(Input.acceleration)查看每个轴的低,中,高值,然后您可以使用if语句和临时Vector2值来获取要分配给Physics2D.gravity的2D值。

对于任何GameObject,您希望加速度计影响更多更少不是,您可以修改{{1那个GameObject。

答案 1 :(得分:0)

可以通过设置Physics2D.gravity来更改应用于场景中所有刚体的重力。

注意:确保您还设置rigidbody.useGravity = true(重力会影响对象)。

实施例: Physics2D.gravity = new Vector2(x,y);

Physics.gravity Unity API

Input-acceleration Unity API

答案 2 :(得分:0)

将其放置在任何元素的update()块中。

Physics2D.gravity是一个采用Vector2作为值的“全局”值。

Debug.Log(Input.acceleration);
Physics2D.gravity = new Vector2(Input.acceleration.x*1.5f, Input.acceleration.y*1.5f);

(您可以在每个输入的加速度属性中编辑/删除乘浮点,我只是为某些指数重力速度添加了它们。) 注意: 这将影响所有的刚体。