Reputation: 109
I have been trying to drag and drop a rigidbody. I have used this script. It's moving the rigidbody with mouse but does not drop the rigidbody, it keeps moving.
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);
}
}
I want something like this example that means it will drag a gameobject having rigidbody and drop in place.
Thanks
Upvotes: 0
Views: 3054
Reputation: 1570
You need to use Input.GetMouseButtonDown for begin drag,
Input.GetMouseButton for dragging,
Input.GetMouseButtonUp for end dragging.
Simple code is:
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);
}
Update for your need
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: Maybe, some syntax error in code i don't check it.
Upvotes: 0