C# 在一行中拖动对象

C# 在一行中拖动对象,c#,object,unity3d,2d,drag,C#,Object,Unity3d,2d,Drag,我正在尝试做一个拖拉效果。我有一个项目,你应该从肉中拔出骨头。拖动是有效的,但当我抓住骨头时,我可以将它向各个方向移动。我想实现的是,我只能朝一个方向拖动它。在下面的图片中,我指的是红线。我尝试了很多方法,但到目前为止都没有效果。感谢您的帮助 我使用这些函数进行拖动 void OnMouseDown() { offset = this.transform.position - Camera.main.ScreenToWorldPoint(new Vector2(Input.mouse

我正在尝试做一个拖拉效果。我有一个项目,你应该从肉中拔出骨头。拖动是有效的,但当我抓住骨头时,我可以将它向各个方向移动。我想实现的是,我只能朝一个方向拖动它。在下面的图片中,我指的是红线。我尝试了很多方法,但到目前为止都没有效果。感谢您的帮助

我使用这些函数进行拖动

void OnMouseDown()
{
    offset = this.transform.position - Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
}

void OnMouseDrag()
{
    Vector3 curScreenPoint = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
    transform.position = curPosition;
}

只需获取鼠标的
x
组件并使用
localPosition

void OnMouseDown()
{
    offset = this.transform.localPosition - Camera.main.ScreenToWorldPoint(new Vector2(transform.localPosition.x, Input.mousePosition.y));
}

void OnMouseDrag()
{
    Vector3 curScreenPoint = new Vector2(transform.localPosition.x, Input.mousePosition.y);
    Vector3 mousePos = Camera.main.ScreenToWorldPoint(curScreenPoint);
    Vector3 curPosition = new Vector3(mousePos.x, 0f, 0f) + offset;
    transform.localPosition = curPosition;
}

可以安全地假设这只会朝红色箭头的方向移动吗?如果是,您知道红色箭头相对于对象的度数吗?红色箭头会改变角度吗?如果不是,我们能假设它总是成45度角吗?是的,只是在红色箭头的方向上。每个物体都有不同的旋转,所以它并不总是45度。啊,可以改变角度的箭头使这变得有点复杂。现在我们进入y=mx+b方程来确定每个鼠标拖动需要多少X和y单位来移动这些单位。我会先让图像以45度的角度移动,然后再在此基础上构建,以允许不同的角度。是的,这听起来是正确的做法。我能问一下我应该把Y+偏移量和X+偏移量放在代码的什么地方吗?是的,它应该是:
Vector3 newposition=newvector2(Input.mousePosition.x+offset,Input.mousePosition.y+offset)然后将骨骼的位置设置为
新位置
。例如-
transform.position=newPosition
它不允许我乘以向量3,它说运算符*不能应用于类型为Vector3@Richarrd82我没有看到偏移量也是一个矢量:)我编辑了我的答案,我搞砸了,在代码里留下了一些东西。应该是Input.mousePosition.xShouldn
curScreenPoint=newvector2(Input.mousePosition.x,Input.mousePosition.y),而不是transform.position.x?此外,如果要移动黄色箭头,则偏移量需要移动变换
Y+offset
X-offset
。如果要移动红色箭头,则需要将其设置为
Y+offset
X+offset
,以确保其在45度方向上移动。