feat: add throwable boxs and set it as prefab
This commit is contained in:
72
Assets/Code/Scripts/Interaction/PlayerBoxController.cs
Normal file
72
Assets/Code/Scripts/Interaction/PlayerBoxController.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class BoxPickup : MonoBehaviour
|
||||
{
|
||||
public Transform PlayerTransform;
|
||||
public Transform CameraTransform;
|
||||
public Transform HandTransform;
|
||||
public float ThrowForce = 10f;
|
||||
public float PickupDistance = 5f;
|
||||
|
||||
private bool isHeld;
|
||||
private Rigidbody m_rigidbody;
|
||||
private PlayerInputController input;
|
||||
|
||||
void Start()
|
||||
{
|
||||
m_rigidbody = GetComponent<Rigidbody>();
|
||||
input = PlayerTransform.GetComponent<PlayerInputController>();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (input.InteractPressed)
|
||||
{
|
||||
if (!isHeld)
|
||||
TryPickup();
|
||||
else
|
||||
Drop();
|
||||
}
|
||||
|
||||
if (input.ThrowPressed)
|
||||
Throw();
|
||||
}
|
||||
|
||||
private void TryPickup()
|
||||
{
|
||||
Collider[] hits = Physics.OverlapSphere(PlayerTransform.position, PickupDistance);
|
||||
|
||||
foreach (Collider hit in hits)
|
||||
{
|
||||
if (hit.transform == transform) {
|
||||
Pickup();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Pickup()
|
||||
{
|
||||
isHeld = true;
|
||||
m_rigidbody.isKinematic = true;
|
||||
transform.SetParent(HandTransform);
|
||||
transform.localPosition = Vector3.zero;
|
||||
transform.localRotation = Quaternion.identity;
|
||||
}
|
||||
|
||||
private void Drop()
|
||||
{
|
||||
isHeld = false;
|
||||
transform.SetParent(null);
|
||||
m_rigidbody.isKinematic = false;
|
||||
}
|
||||
|
||||
private void Throw()
|
||||
{
|
||||
if (!isHeld)
|
||||
return;
|
||||
|
||||
Drop();
|
||||
m_rigidbody.AddForce(PlayerTransform.forward * ThrowForce, ForceMode.Impulse);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user