Тема: проблема в 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;
        }
    }
}

2

Re: проблема в unity C#

Кінематичні Rigidbody завжди проходитимуть через будь-який колайдер, незалежно від його типу (динамічний, кінематичний чи статичний). Якщо вам потрібно, щоб об’єкт зіткнувся з іншими об’єктами, але на нього не впливали сили фізики, ви можете скористатися Character Controller, або використати кінематичне Rigidbody та закодувати для нього своє особливе оброблення колізій.

Подякували: LegendaryCake1