Linecast не видит игрока
Такая ситуация, у меня есть конус, который является глазами монстра. Когда он попадает на игрока напрямую, то в консоль я должен получить принт, если через блок, то ничего не должно происходить. Но я застреваю на строчке - if (Physics.Linecast(eyes.position, Player.transform.position, out rayHit))
И дальше этой строчки никуда не могу пройти, тут у меня всегда false. Кое-как добивался того, чтобы было true. Но print("hit: " + rayHit.collider.gameObject.name); ловил hit: Floor. Я настраивал маски и он все равно видел пол, при условии, что глаза вообще никак не пересекаются с ним.
На игроке висит скрипт, который запускает эту функцию.(Потом перенесу на глаза скрипт и переделаю его, но пока так) И тут ловит игрока отлично.
public bool alive = true;
private void OnTriggerEnter(Collider other)
{
if(other.gameObject.name == "Eyes")
{
other.transform.parent.GetComponent<MonsterAI>().checkSight();
print("игрок попал под зрение");
}
}
Проблемный участок с проверками.
public Transform eyes;
public GameObject Player;
public void checkSight()
{
if (alive)
{
RaycastHit rayHit;
if (Physics.Linecast(eyes.position, Player.transform.position, out rayHit))
{
print("hit: " + rayHit.collider.gameObject.name);
if(rayHit.collider.gameObject.name == "Ply")
{
print("Ply");
}
}
else{ print("false"); }
}
}
Ответы (1 шт):
Ok google: Physics.Linecast
Первая ссылка: Unity - Scripting API: Physics.Linecast
Я ни разу не пользовался Linecast и сам впервые тыкнул по этой ссылке.
Там, в документации английским по белому:
Description
Returns true if there is any collider intersecting the line between start and end.
Допустим мы не понимаем английскую тарабарщину, тогда используем translate.google.com.
Описание
Возвращает true, если есть коллайдер, пересекающий линию между началом и концом.
Как минимум, коллайдер с которым столкнётся твой каст, это колайдер самого монстра и ни до какого Ply он не дойдёт в любом случае. Если этого не происходит, ты пустил не от туда / не туда от куда ожидал.
В Unity3D мы используют Debug!
Им можно писать разные типы сообщений в консоль Debug.Log("Success"); или Debug.LogWarning("Fail!");.
И даже рисовать разные примитивы, как например линию DrawLine(from.position, to.position, Color.green);, что полезно при отладке лучей.

