unity pick up script
using UnityEngine;
using System.Collections;
public class GrabandDrop : MonoBehaviour {
GameObject grabbedObject;
float grabbedObjectSize;
// Use this for initialization
void Start () {
}
GameObject GetMouseHoverObject(float range){
//Check for Collider with Raycast
Vector3 position = gameObject.transform.position;
RaycastHit raycastHit;
Vector3 target = position + Camera.main.transform.forward * range;
if (Physics.Linecast(position, target, out raycastHit ))
return raycastHit.collider.gameObject;
return null;
}
void TryGrabbedObject(GameObject grabObject){
//Check for Object if not null Grab it
if (grabObject == null || !CanGrab(grabObject))
return;
grabbedObject = grabObject;
grabbedObjectSize = grabObject.GetComponent<Renderer>().bounds.size.magnitude;
}
//Can grab condition (RigidBody)
bool CanGrab(GameObject candidate){
return candidate.GetComponent<Rigidbody> () != null;
}
void DropObject(){
//Release Direction and Velocity
//Set multiplier larger for more force
grabbedObject.GetComponent<Rigidbody> ().velocity = Vector3.forward * 50;
//Check if hands are empty
if (grabbedObject = null)
return;
//if holding object
if (grabbedObject.GetComponent<Rigidbody> () != null)
//stop object before release
grabbedObject.GetComponent<Rigidbody> ().velocity = Vector3.zero;
}
// UPDATE is called once per frame
void Update () {
//Assign Input for Grab
if (Input.GetMouseButtonDown (1)) {
if (grabbedObject == null)
TryGrabbedObject (GetMouseHoverObject (5));
//Set Grab and Drop as Same button (Right Mouse Button)
else DropObject ();
}
if (grabbedObject != null) {
//Set position of grabbed Object after grabbing
Vector3 newposition = gameObject.transform.position + Camera.main.transform.forward * grabbedObjectSize;
grabbedObject.transform.position = newposition;
}
Debug.Log (GetMouseHoverObject (5));
}
}