Spaces:
Running
Running
| using UnityEngine; | |
| public class PickupObject : MonoBehaviour | |
| { | |
| [] | |
| public float moveSpeed = 10f; // Speed at which the object moves | |
| public Vector3 holdOffset = new Vector3(0, 0, 1.5f); // Offset in front of the camera | |
| private Transform cameraTransform; // Player's camera transform | |
| private Vector3 originalPosition; // Original position of the object | |
| private Quaternion originalRotation; // Original rotation of the object | |
| private bool isHolding = false; // Whether the object is currently in front of the camera | |
| void Start() | |
| { | |
| // Find the player's camera (assumes it's tagged as "MainCamera") | |
| cameraTransform = Camera.main.transform; | |
| // Save the original position and rotation of the object | |
| originalPosition = transform.position; | |
| originalRotation = transform.rotation; | |
| } | |
| void Update() | |
| { | |
| // Smoothly move the object to its target position | |
| if (isHolding) | |
| { | |
| // Move the object in front of the camera | |
| Vector3 targetPosition = cameraTransform.position + cameraTransform.forward * holdOffset.z + cameraTransform.up * holdOffset.y; | |
| Quaternion targetRotation = Quaternion.LookRotation(cameraTransform.forward, cameraTransform.up); | |
| transform.position = Vector3.Lerp(transform.position, targetPosition, moveSpeed * Time.deltaTime); | |
| transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, moveSpeed * Time.deltaTime); | |
| } | |
| else | |
| { | |
| // Return the object to its original position | |
| transform.position = Vector3.Lerp(transform.position, originalPosition, moveSpeed * Time.deltaTime); | |
| transform.rotation = Quaternion.Lerp(transform.rotation, originalRotation, moveSpeed * Time.deltaTime); | |
| } | |
| } | |
| // Toggle the object's hold state | |
| public void ToggleHold() | |
| { | |
| isHolding = !isHolding; | |
| } | |
| } |