示例#1
0
        /// <summary>
        /// Raycasting with visual ray
        /// </summary>
        /// <param name="_sender"> Class that will draw visual ray by using a Coroutine. Just write keyword "this" in current paramerer </param>
        /// <param name="_originPosition"> Origin position of your ray </param>
        /// <param name="_direction"> Ray direction </param>
        /// <param name="_distance"> Raycast distance </param>
        /// <param name="_layerMask"> Objects in this layers can be casted </param>
        /// <param name="_drawLine"> Do you want to draw the debug line? </param>
        /// <param name="_rayLifeTime"> Life time of debug ray </param>
        /// <returns></returns>
        public static CastResult RayCast(MonoBehaviour _sender, Vector3 _originPosition, Vector3 _direction, float _distance, LayerMask _layerMask, bool _drawLine = true, float _rayLifeTime = 0.5f)
        {
            CastResult l_castResult = new CastResult();


            //Cast hit
            RaycastHit l_hit;



            //Hit something? => Add hit as result
            if (Physics.Raycast(_originPosition, _direction, out l_hit, _distance, _layerMask))
            {
                l_castResult.hits = new RaycastHit[] { l_hit }
            }
            ;


#if UNITY_EDITOR
            //Draw the debug line
            void DrawLine()
            {
                if (l_castResult)
                {
                    _sender.StartCoroutine(LineDrawer(_originPosition, l_castResult.GetFirstHit().point, Color.green, _rayLifeTime));
                }


                else
                {
                    _sender.StartCoroutine(LineDrawer(_originPosition, _originPosition + _direction * _distance, Color.red, _rayLifeTime));
                }
            }

            if (_drawLine)
            {
                DrawLine();
            }
#endif


            return(l_castResult);
        }