Третий параметр использует хит. Но подсказка должна быть
расстояние, и это на самом деле работает. Почему?
1 . Третий параметр не out hit
. Это зависит от используемой перегрузки метода.
Функция Raycast
имеет около перегруженных методов 16 , что означает, что существует около 16 различных способов ее использования, предоставляя им разные аргументы. Вы новичок в Unity, но это больше связано с языком программирования C #, чем с Unity. Если вы не знаете, что такое перегрузка метода, прочитайте этот пост.
С примером из вашего вопроса, это перегрузка, которую вы используете:
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);
Обратите внимание, что последний параметр maxDistance
, а не layerMask
. чтобы использовать максимальное расстояние и маску слоя, используйте это, которое должно быть Physics.Raycast(transform.position, rayDirection, out hit, distance, layerMask)
, и ниже это перегрузка для этого:
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask);
Это другие доступные перегрузки для функции Raycast
:
public static bool Raycast(Ray ray);
public static bool Raycast(Vector3 origin, Vector3 direction);
public static bool Raycast(Ray ray, float maxDistance);
public static bool Raycast(Ray ray, out RaycastHit hitInfo);
public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo);
public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance);
public static bool Raycast(Ray ray, float maxDistance, int layerMask);
public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance, int layerMask);
public static bool Raycast(Ray ray, [DefaultValue("Mathf.Infinity")] float maxDistance, [DefaultValue("DefaultRaycastLayers")] int layerMask, [DefaultValue("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);
public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance, int layerMask);
public static bool Raycast(Ray ray, out RaycastHit hitInfo, [DefaultValue("Mathf.Infinity")] float maxDistance, [DefaultValue("DefaultRaycastLayers")] int layerMask, [DefaultValue("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask);
public static bool Raycast(Vector3 origin, Vector3 direction, [DefaultValue("Mathf.Infinity")] float maxDistance, [DefaultValue("DefaultRaycastLayers")] int layerMask, [DefaultValue("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, [DefaultValue("Mathf.Infinity")] float maxDistance, [DefaultValue("DefaultRaycastLayers")] int layerMask, [DefaultValue("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
Я не могу создать класс Ray
по параметрам источника и направления.
2 . Вы не можете использовать класс Ray
, потому что вы создали скрипт с именем Ray
. Этот класс Ray
не имеет конструктора. У Unity уже есть API с именем Ray , и я уверен, что это то, что вы хотите использовать. Не называйте ваш скрипт одинаково с любым API-интерфейсом Unity. Если вы это сделаете, он не будет знать, какой из них использовать (ваш класс Ray или класс Ray
Unity).
У вас есть два варианта:
A . Переименуйте ваш Ray
класс в другое
B . Пусть компилятор знает, что вы хотите использовать класс Ray
Unity вместо своего собственного, предоставив пространство имен Ray
класса Unity, которое является UnityEngine
.
RaycastHit hit;
int layerMask = 1 << LayerMask.NameToLayer("LayerName"); ;
float distance = 100;
UnityEngine.Ray ray = new UnityEngine.Ray(transform.position, transform.forward);
if (Physics.Raycast(ray, out hit, distance, layerMask))
{
}