Unity3d 刚体用鼠标拖放

Unity3d 刚体用鼠标拖放,unity3d,Unity3d,我一直在尝试拖放刚体。我用过这个脚本。它用鼠标移动刚体,但不会放下刚体,它会继续移动 public class move : MonoBehaviour { public Camera cam; private float maxWidth; // Use this for initialization void Start() { if (cam == null) { cam = Camera.main; } Vector3 upperCor

我一直在尝试拖放刚体。我用过这个脚本。它用鼠标移动刚体,但不会放下刚体,它会继续移动

public class move : MonoBehaviour {

public Camera cam;
private float maxWidth;

// Use this for initialization
void Start()
{
    if (cam == null)
    {
        cam = Camera.main;
    }
    Vector3 upperCorner = new Vector3(Screen.width, Screen.height, 0.0f);
    Vector3 targetWidth = cam.ScreenToWorldPoint(upperCorner);
    float hatWidth = renderer.bounds.extents.x;
    maxWidth = targetWidth.x - hatWidth;
}


// Update is called once per frame
void FixedUpdate () {

    Vector3 rawPosition = cam.ScreenToWorldPoint(Input.mousePosition);
    Vector3 targetPosition = new Vector3(rawPosition.x, 0.0f, 0.0f);
    float targetWidth = Mathf.Clamp(targetPosition.x, -maxWidth, maxWidth);
    targetPosition = new Vector3(targetWidth, targetPosition.y, targetPosition.z);
    rigidbody.MovePosition(targetPosition);


}
}

我想要一个类似的例子,这意味着它将拖动一个具有刚体的游戏对象,并将其放置到位

谢谢

您需要使用开始拖动

拖拉,

用于末端拖动

简单代码是:

void FixedUpdate () {
    // 0 means left mouse button.
    if(Input.GetMouseButton(0)){ // Check left button is still down so change rigidbody position
       Vector3 rawPosition = cam.ScreenToWorldPoint(Input.mousePosition);
       Vector3 targetPosition = new Vector3(rawPosition.x, 0.0f, 0.0f);
       float targetWidth = Mathf.Clamp(targetPosition.x, -maxWidth, maxWidth);
       targetPosition = new Vector3(targetWidth, targetPosition.y, targetPosition.z);
       rigidbody.MovePosition(targetPosition);
    }else if(Input.GetMouseButtonDown(0)){
       Vector3 startPositionRaw = cam.ScreenToWorldPoint(Input.mousePosition);
    }else if(Input.GetMouseButtonUp(0)){
       cam.ScreenToWorldPoint(Input.mousePosition);
}
根据您的需要进行更新

 void FixedUpdate () {
        // 0 means left mouse button.
        if(Input.GetMouseButton(0)){ // Check left button is still down so change rigidbody position
           RaycastHit hit;
           Ray ray = cam.ScreenPointToRay(Input.mousePosition);
           if (Physics.Raycast(ray,out hit,100)){
               if(hit.collider.gameObject.name=="TargetObjectName"){
                  Vector3 rawPosition = cam.ScreenToWorldPoint(Input.mousePosition);
                   //This is your solution 
                   Vector3 targetPosition = new Vector3(rawPosition.x, 0.0f, 0.0f);
                   float targetWidth = Mathf.Clamp(targetPosition.x, -maxWidth, maxWidth);
                   targetPosition = new Vector3(targetWidth, targetPosition.y, targetPosition.z);

                   // Maybe this is more usefull
                   Vector3 targetPosition = new Vector3(rawPosition.x, 0.0f, 0.0f);
                   rigidbody.MovePosition(targetPosition);
               }
           }
        }else if(Input.GetMouseButtonDown(0)){
           Vector3 startPositionRaw = cam.ScreenToWorldPoint(Input.mousePosition);
        }else if(Input.GetMouseButtonUp(0)){
           Vector3 endPositionRaw = cam.ScreenToWorldPoint(Input.mousePosition);
    }

PS:也许,代码中有语法错误,我没有检查。

很好!您的代码符合我的目的,但我在场景中有一些Unity UI uGUI按钮。当我按下这些按钮时,刚体跳到按钮上。我怎样才能阻止这种跳跃?它完全是根据你的运动算法而变化的。如果你不想僵化到你的按钮位置,你需要改变你的运动算法。因为在本例中设置了Vector3 targetPosition=new Vector3rawPosition.x,0.0f,0.0f;因此,您的鼠标输入获取按钮的x位置,并将其值设置为刚体。如果您想进入按钮位置,但不喜欢远程传送。想要移动顺畅,您可以使用或感谢您的提示。我已经更改了Vector3 targetPosition=新的Vector3rawPosition.x,rawPosition.y,0.0f;因为它将在x轴和y轴上移动。代码就像刚体跟随鼠标位置一样工作,但我真正想要的是当鼠标刚好在刚体位置时,刚体将跟随鼠标。因此,算法将类似于如果鼠标位置在刚体上{刚体将跟随鼠标}你能帮忙吗?你需要使用。