I am trying to implement a game where the player can pickup some objects and place them somewhere else. I need the player to pick one object at a time. I found some code on youtube and it works perfectly fine sometimes but other times it gives problems such as :
Problem 1 : When the player picks the object and try to drop it at some other place , the object falls at the same spot from where it is picked even though it is moved after picking.
Problem 2 : Runtime error : Null Reference Exception at line 57.
The code i used :
[SerializeField] private LayerMask pickUpLayer;
[SerializeField] private Camera playerCamera;
[SerializeField] private Transform hand;
[SerializeField] private float pickUpRange;
private Rigidbody currentObjectRigidbody;
private Collider currentObjectCollider;
private Vector3 currentPosition;
private void Update()
{
if (Input.GetKeyDown(KeyCode.P))
{
Ray pickUpRay = new Ray(playerCamera.transform.position, playerCamera.transform.forward);
if (Physics.Raycast(pickUpRay, out RaycastHit hitInfo, pickUpRange, pickUpLayer))
{
if (currentObjectRigidbody)
{
//Exchange Objects
/*currentObjectRigidbody.isKinematic = false;
currentObjectCollider.enabled = true;
currentObjectRigidbody = hitInfo.rigidbody;
currentObjectCollider = hitInfo.collider;
currentObjectRigidbody.isKinematic = true;
currentObjectCollider.enabled = false;*/
}
else
{
//Picking
currentObjectRigidbody = hitInfo.rigidbody;
currentObjectCollider = hitInfo.collider;
currentObjectRigidbody.isKinematic = true;
currentObjectCollider.enabled = false;
}
return;
}
if (currentObjectRigidbody)
{
//Droping
currentObjectRigidbody.isKinematic = false;
currentObjectCollider.enabled = true;
currentObjectRigidbody = hitInfo.rigidbody;
currentObjectCollider = hitInfo.collider;
currentObjectRigidbody.isKinematic = true;
currentObjectCollider.enabled = false;
}
}
if (currentObjectRigidbody)
{
currentObjectRigidbody.transform.position=hand.transform.position;
//currentObjectRigidbody.rotation=hand.rotation;
hand.transform.localScale=currentObjectRigidbody.transform.localScale;
}
}
Can anyone help me?