使用单个操纵杆旋转3D对象

时间:2016-01-15 00:00:44

标签: c# unity3d 3d rotation

我在Unity 3d中创建一个使用单个操纵杆的游戏。我试图找出如何正确地使用操纵杆旋转3d对象。基本上当操纵杆被向上(或向前)推动时,物体将向前旋转,反之亦然,以便在向下推动时。我的问题是如果我向左或向右倾斜向上推动对象正确旋转。

我的操纵杆使用给出值(0,1)表示向上,(0,-1)表示向下,(1,0)表示向右,(-1,0表示用于向左)。

如何让对象在操纵杆上向前或向后旋转并朝向对角线方向旋转? (如果这令人困惑,我很抱歉。我想尽可能简单地问这个问题。)

现在这就是我用来旋转的东西:

if ((x > 0 && x < .2f) || (x < 0 && x > .2f)) x = 0;
if ((y > 0 && y < .2f) || (y < 0 && y > .2f)) y = 0;

if (x < 0) car.transform.Rotate(car.transform.forward.x * 10f, car.transform.forward.y * 10f, -car.transform.forward.y * 10f);
else if (x > 0) car.transform.Rotate(car.transform.forward.x * 10f, car.transform.forward.y * 10f, car.transform.forward.y * 10f);
else car.transform.Rotate(car.transform.forward.x * 10f, car.transform.forward.y * 10f, 0f);

1 个答案:

答案 0 :(得分:2)

看起来你不理解Transform.Rotate(第二次超载)。

这是该方法的签名:

return $this->render('AppBundle:theme1:default:index.html.twig'...

public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self); 是围绕xAngle轴旋转的度数。传递前向矢量的分量(x)正试图将单位矢量分量放入接受角度的参数中。概念和单位根本不匹配,因此无法描述结果。

相反,您应该根据操纵杆位置使用角度进行旋转。相对模式(默认car.transform.forward.x)意味着操纵杆相对于对象的当前旋转起作用。

这样的事情应该这样做,Space.Selfx是你的操纵杆位置:

y

您可以仔细查看哪些操纵杆轴与哪些Unity轴匹配,或尝试移动car.transform.Rotate(y, x, 0) x,直到它正常工作。您可能还需要根据自己的偏好来否定yx