Тема: проблема в unity C#
( Я використовую Unity і це проблема яка пов'язана з цим )
всім привіт ! В мене проблема з тим , що я хочу брать предмети і носити їх в своїй грі і щоб це зробити я зробив код який ставить значення is Kinematic ( в компоненті RigedBody ) на True щоб виключити його фізику і щоб я міг його носити . Все вийшло але тепер в момент коли я його ношу то він може проходити скрізь стіни і його там можна оставить ( для мене це проблема ) ( я використовую unity 2021 і нову Visual Studio ) ось код
( я вибачаюсь за помилки які можливо тут є )
using UnityEngine;
public class Interactive : MonoBehaviour
{
[SerializeField] private Camera _fpcCamera;
public float pickupDistance = 3f;
private Ray _ray;
private RaycastHit _hit;
private bool _isHoldingItem;
private GameObject _heldItem;
private Transform _previousParent;
private void Update()
{
RaycastInteraction();
if (Input.GetKeyDown(KeyCode.E))
{
if (_isHoldingItem)
{
ReleaseItem();
}
else
{
TryPickupItem();
}
}
}
private void RaycastInteraction()
{
_ray = _fpcCamera.ScreenPointToRay(new Vector2(Screen.width / 2, Screen.height / 2));
if (Physics.Raycast(_ray, out _hit))
{
// Обробка знайдених об'єктів
// ...
}
}
private void TryPickupItem()
{
if (_hit.transform != null && _hit.transform.CompareTag("Cube"))
{
_isHoldingItem = true;
_heldItem = _hit.transform.gameObject;
_heldItem.GetComponent<Rigidbody>().isKinematic = true;
_previousParent = _heldItem.transform.parent;
_heldItem.transform.parent = _fpcCamera.transform;
_heldItem.transform.localPosition = Vector3.forward * pickupDistance;
}
}
private void ReleaseItem()
{
if (_heldItem != null)
{
_isHoldingItem = false;
_heldItem.transform.parent = _previousParent;
_heldItem.GetComponent<Rigidbody>().isKinematic = false;
_heldItem = null;
}
}
}