Exemplo n.º 1
0
    private void OnUpdatePinch(float fDistance)
    {
        float fZoomAverage = PrimitiveHelper.GetCalcReverseFloat(_fStartPinchZoomSize, fDistance);

        fZoomAverage = Mathf.Clamp(fZoomAverage, p_iCameraZoomMin, p_iCameraZoomMax);

        if (_bIsCameraOrtho)
        {
            _pCamera.orthographicSize = fZoomAverage;
        }
        else
        {
            // 터치 2개 중앙부터 Plane 까지 쏜 좌표값 구하기
            Vector3 v3CenterRayPos = PrimitiveHelper.GetPlaneRaycastPos(_sPlaneCurrentAxis, _pCamera.ScreenPointToRay(PrimitiveHelper.GetCenterByResolution()));

            _pTransCamera.position = v3CenterRayPos - _pTransCamera.forward * fZoomAverage;
        }

        if (p_fZoomSmoothFactor > 0f)
        {
            _fLerpPinchDistance = Mathf.Lerp(_fLerpPinchDistance, fDistance, Time.deltaTime * p_fZoomSmoothFactor);
        }
        else
        {
            _fLerpPinchDistance = fDistance;
        }
    }
Exemplo n.º 2
0
    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();
                }
            }
        }
    }