How to Make a First Person Player Carry an Object in Unity

How to Make a First Person Player Carry an Object in Unity

Here is a script that you can use to make a first person player character carry an object from one place to another in Unity:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CarryObject : MonoBehaviour
{
    // The object that the player will be carrying
    public GameObject objectToCarry;

    // The distance that the object will be carried from the player
    public float carryDistance = 2.0f;

    // The speed at which the object will be carried
    public float carrySpeed = 2.0f;

    // The position that the object will be carried to
    public Vector3 carryPosition;

    // Whether or not the object is currently being carried
    private bool isCarrying = false;

    void Update()
    {
        // If the player presses the "Pick Up" button and they are not already carrying an object
        if (Input.GetButtonDown("Pick Up") && !isCarrying)
        {
            // Set the isCarrying flag to true
            isCarrying = true;

            // Set the objectToCarry's parent to be the player
            objectToCarry.transform.parent = transform;

            // Set the objectToCarry's position to be the carry position
            objectToCarry.transform.localPosition = carryPosition;

            // Set the objectToCarry's rotation to be the same as the player's
            objectToCarry.transform.localRotation = transform.rotation;
        }
        // If the player presses the "Put Down" button and they are carrying an object
        else if (Input.GetButtonDown("Put Down") && isCarrying)
        {
            // Set the isCarrying flag to false
            isCarrying = false;

            // Set the objectToCarry's parent to be null
            objectToCarry.transform.parent = null;

            // Set the objectToCarry's position to be the carry position
            objectToCarry.transform.position = transform.position + (transform.forward * carryDistance);
        }

        // If the object is being carried
        if (isCarrying)
        {
            // Set the objectToCarry's position to be the carry position
            objectToCarry.transform.localPosition = Vector3.Lerp(objectToCarry.transform.localPosition, carryPosition, Time.deltaTime * carrySpeed);

            // Set the objectToCarry's rotation to be the same as the player's
            objectToCarry.transform.localRotation = transform.rotation;
        }
    }
}



This script assumes that you have an object that the player can carry, and that you have two buttons defined in the Input Manager: "Pick Up" and "Put Down". When the player presses the "Pick Up" button, the script will set the objectToCarry's parent to be the player, and set its position and rotation to be the carry position and the player's rotation, respectively. When the player presses the "Put Down" button, the script will set the objectToCarry's parent to be null and set its position to be in front of the player at the carry distance. The script also includes a carrySpeed variable, which controls the speed at which the object will be carried, and a carryPosition variable, which controls the position that the object