用手指触摸旋转3D对象Unity 3D

时间:2018-12-22 11:49:15

标签: c# unity3d

我想在屏幕上向左或向右滑动时旋转球,所以我将脚本设置为波纹管,但是只有当我直接在屏幕上而不是屏幕上的任何地方直接滑动时,球才旋转。 ?

球形脚本:

 private float baseAngle = 0.0f;
public Camera cam;

void OnMouseDown()
{
    Vector3 pos = cam.WorldToScreenPoint(transform.position);
    pos = Input.mousePosition - pos;
    baseAngle = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg;
    baseAngle -= Mathf.Atan2(transform.right.y, transform.right.x) * Mathf.Rad2Deg;
}

void OnMouseDrag()
{
    Vector3 pos = cam.WorldToScreenPoint(transform.position);
    pos = Input.mousePosition - pos;
    float ang = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg - baseAngle;
    transform.rotation = Quaternion.AngleAxis(-ang, Vector3.up);
}

1 个答案:

答案 0 :(得分:0)

您的麻烦是您提供的脚本已附加到球本身,因此触摸(单击)仅由球处理。换句话说,OnMouseDownOnMouseDrag仅在触摸(点击)击中球时被调用。请参见Documentation。它说:

  当用户在GUIElement或Collider上方按下鼠标按钮时,会调用

OnMouseDown。

至少有一些方法可以获取想要的东西:

  • 如果您想在屏幕上的任何地方都受到触摸,请创建一个单独的游戏对象(空并且仅包含一个对撞机和您的脚本),并将其设置为适合屏幕的对撞机绑定。然后在脚本中添加一个公共变换字段,并指定球的变换,以便可以从其他脚本旋转球
  • 使用Input类中的方法代替OnMouseDownOnMouseDrag。例如Input.GetMouseButton-每当用户单击鼠标按钮(或触摸)时,无论单击什么,它都会被调用。