private void OnTriggerEnter(Collider pCollider)
    {
        Transform pTrans = pCollider.transform;

        int   iHashCode = pCollider.GetHashCode();
        float fDistance = (pTrans.position - _pTransformCached.position).sqrMagnitude;

        if (_mapMagneticPool.ContainsKey(iHashCode) == false)
        {
            IMagneticListener IMagneticListener = pTrans.GetComponent <IMagneticListener>();

            SInfoMagnetic sInfoMagnetic = new SInfoMagnetic();
            sInfoMagnetic.pTransCached      = pTrans;
            sInfoMagnetic.IMagneticListener = IMagneticListener;
            sInfoMagnetic.eStateMagnetic    = EStateMagnetic.None;
            sInfoMagnetic.fLastDistance     = fDistance;

            _mapMagneticPool.Add(iHashCode, sInfoMagnetic);
        }
        else
        {
            SInfoMagnetic sInfoMagnetic = _mapMagneticPool[iHashCode];
            sInfoMagnetic.eStateMagnetic = EStateMagnetic.None;
            sInfoMagnetic.fLastDistance  = fDistance;
        }
    }
        public SMagneticInfo(Transform pTransCached, IMagneticListener iMagneticListener, float fRandomSpeed)
        {
            this.pTransCached       = pTransCached;
            this.iMagneticListener  = iMagneticListener;
            this.fMagneticStartTime = Time.time;
            this.fRandomSpeed       = fRandomSpeed;

            this._pRigidbody   = pTransCached.GetComponent <Rigidbody>();
            this._pRigidbody2D = pTransCached.GetComponent <Rigidbody2D>();

            bool bIsStartMagnetic = true;

            iMagneticListener.IMagneticListener_OnStartMagnetic(ref bIsStartMagnetic);
            this.bIsStartMagnetic = bIsStartMagnetic;
        }
    // ========================================================================== //

    #region Private

    /* private - [Proc] Function
     * 로직을 처리(Process Local logic)           */

    private void OnEnter(int iHashCode, Transform pTrans)
    {
        IMagneticListener iMagneticListener = pTrans.GetComponent <IMagneticListener>();

        if (iMagneticListener == null)
        {
            return;
        }

        if (_mapMagneticPool.ContainsKey(iHashCode) == false)
        {
            _mapMagneticPool.Add(iHashCode, new SMagneticInfo(pTrans, iMagneticListener, Random.Range(p_fMagnetPower_Random_Min, p_fMagnetPower_Random_Max)));
        }
        else
        {
            _mapMagneticPool[iHashCode] = _mapMagneticPool[iHashCode].ResetStartTime();
        }
    }
    private void OnTriggerStay(Collider pCollider)
    {
        int           iHashCode     = pCollider.GetHashCode();
        SInfoMagnetic sInfoMagnetic = _mapMagneticPool[iHashCode];

        if (sInfoMagnetic.eStateMagnetic == EStateMagnetic.Attracted)
        {
            return;
        }

        Transform pTrans = sInfoMagnetic.pTransCached;

        float fDistanceSqrt    = (pTrans.position - _pTransformCached.position).sqrMagnitude;
        float fDistAtrractSqrt = (p_fMagnetReactRadius * p_fMagnetReactRadius);

        if (sInfoMagnetic.eStateMagnetic == EStateMagnetic.Reaction || fDistanceSqrt < fDistAtrractSqrt)
        {
            if (sInfoMagnetic.eStateMagnetic == EStateMagnetic.None)
            {
                sInfoMagnetic.eStateMagnetic = EStateMagnetic.Reaction;
            }

            Vector3 v3Direction      = (pTrans.position - _pTransformCached.position);
            float   fLastDistance    = sInfoMagnetic.fLastDistance;
            float   fRealDistance    = v3Direction.sqrMagnitude;
            float   fCurrentDistance = PrimitiveHelper.GetCalcReverseFloat(sInfoMagnetic.fLastDistance, fRealDistance) * p_fMagnetReactMultiplier;

            fCurrentDistance = Mathf.Clamp(fCurrentDistance, 0f, 50f);

            pTrans.position += fCurrentDistance * (v3Direction * _iMagneticTypeDir) * Time.deltaTime;

            if (fRealDistance < float.Epsilon && sInfoMagnetic.eStateMagnetic != EStateMagnetic.Attracted)
            {
                sInfoMagnetic.eStateMagnetic = EStateMagnetic.Attracted;

                IMagneticListener IMagneticListener = sInfoMagnetic.IMagneticListener;

                if (IMagneticListener != null)
                {
                    IMagneticListener.IOnAttracted();
                }
            }
        }
    }