我在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);
答案 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.Self
和x
是你的操纵杆位置:
y
您可以仔细查看哪些操纵杆轴与哪些Unity轴匹配,或尝试移动car.transform.Rotate(y, x, 0)
和x
,直到它正常工作。您可能还需要根据自己的偏好来否定y
或x
。