C# 基于操纵杆输入的游戏对象移动

C# 基于操纵杆输入的游戏对象移动,c#,unity3d,translate,joystick,C#,Unity3d,Translate,Joystick,我想移动游戏对象的基础上操纵杆的输入,而手机是固定在横向模式 下面是我的代码 selectedGameObject.transform.forward = new Vector3(joyStick.Horizontal, 0f, joyStick.Vertical); if(joyStick.Direction.y > 0) { selectedGameObject.transform.Translate(new Vector3(joyStick.Horizont

我想移动游戏对象的基础上操纵杆的输入,而手机是固定在横向模式

下面是我的代码

  selectedGameObject.transform.forward = new Vector3(joyStick.Horizontal, 0f, joyStick.Vertical);

  if(joyStick.Direction.y > 0)
  {
      selectedGameObject.transform.Translate(new Vector3(joyStick.Horizontal * 0.01f, 0.0f, joyStick.Vertical * 0.01f));
  }
  if (joyStick.Direction.y < 0)
  {
     selectedGameObject.transform.Translate(new Vector3(joyStick.Horizontal * 0.01f, 0.0f, -joyStick.Vertical * 0.01f));
  }
selectedGameObject.transform.forward=新矢量3(操纵杆水平、0f、操纵杆垂直);
如果(操纵杆方向y>0)
{
选择EdgameObject.transform.Translate(新矢量3(操纵杆.水平*0.01f,0.0f,操纵杆.垂直*0.01f));
}
if(操纵杆方向y<0)
{
选择EdgameObject.transform.Translate(新矢量3(操纵杆.水平*0.01f,0.0f,-操纵杆.垂直*0.01f));
}

不幸的是,游戏对象移动异常,有时会以相反的方式移动。我遗漏了什么?

首先,您不需要这些if语句,因为它们都在做相同的事情。您只需检查y方向是否不为空,然后选择GameObject.transform.Translate(新矢量3(操纵杆.水平*0.01f,0.0f,操纵杆.垂直*0.01f))。第二,不要设置前向向量,只需将其旋转到水平值即可。这样,你就不需要侧向移动,只需向前平移,然后旋转游戏对象。我试着移除if循环。它只是朝相反的方向移动,然后将值反转。。或者将内部游戏对象旋转到正确的方向,我必须根据y值将其反转,以防止其反向移动,但仍然不正确。它只是奇怪地移动你说奇怪是什么意思?你的y值从-1到1,这意味着如果你翻译你的游戏对象,它将根据该值向一个方向或另一个方向移动。实际上,您甚至不需要检查它是否为0,因为它有一个死区,并且向量值无论如何都将为0。