Why can I not make the optional agruments to my Raycast work?
I have some trouble with Raycast. Well, actually, it's working perfectly at the moment, but I'm wondering why my previous attempts did not work. Here is the current code:
public LayerMask layer;
private void FixedUpdate ()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit
// bool hasClicked is set in Update() to true if there has been a mouse click
if (hasClicked && Physics.Raycast(ray, out hit, Mathf.Infinity, layer))
{
// Do the things I want with the different attributes of hit
hasClicked = false;
}
}
As I said, this works fine. But I am having trouble understanding why some other Raycast calls fail. In the documentation, the overload that I want looks like this:
public static bool Raycast(
Ray ray,
out RaycastHit hitInfo,
float maxDistance = Mathf.Infinity,
int layerMask = DefaultRaycastLayers,
QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
The easiest use of this would be the call Physics.Raycast(ray, out hit)
, but for my purposes I need to specify a value for layerMask
. I've read up on optional and named arguments for C#, trying to do this call without specifying maxDistance
, and I have no idea why the call Physics.Raycast(ray, out hit, layerMask: layer)
gives errors. The errors reported by Unity are as follows:
The best overloaded method match for `UnityEngine.Physics.Raycast(UnityEngine.Ray, float, int)' has some invalid arguments
Argument `#2' does not require `out' modifier. Consider removing `out' modifier
How come it can't find the correct overload? Is it somehow my fault (i.e. is this as expected from the C# specifications), or is C# and Unity's compiler just bad at finding the correct overload when I meddle with the named and optional arguments?
Even when I try to name everything, and call Physics.Raycast(ray: ray, hitInfo: out hit, layerMask: layer)
I get the following error
The best overloaded method match for `UnityEngine.Physics.Raycast(UnityEngine.Ray, out UnityEngine.RaycastHit, float)' does not contain a parameter named `layerMask'
Once again, it's struggling to find the correct overload. Is it at all possible to call the overload that I want without specifying maxDistance
?
Your answer
Follow this Question
Related Questions
Unity Error CS1729 The Type 'Plane' does not contain a constructer that takes 2 arguments 0 Answers
How to cast a Ray using local pivot of an object? 1 Answer
Third person shooter need some help 0 Answers
Error CS165 after Update 1 Answer
wall check is always returning true even though the distance doesn't fit my parameters :( 1 Answer