/// <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); }