Unity Terrain не всегда возвращает удар по плоским частям меша.
У меня есть простая установка с ландшафтом, запеченной сеткой и капсулой с агентом сетки и приведенным ниже сценарием. Что должно произойти, так это то, что пользователь щелкает точку на местности, и капсула перемещается туда, обходя препятствия.
Кажется, что по большей части все работает нормально, но если пользователь щелкает по плоской части ландшафта (а не по непроходимой области, такой как дерево), raycast не попадает, поэтому пункт назначения не обновляется (видно по журнал отладки "попадал"). Я также хотел бы иметь возможность нажимать на места, по которым можно ходить.
Поскольку этот код отлично работает в других сценах, я сомневаюсь, что это проблема с кодом и, вероятно, с настройкой ландшафта.
public class PlayerController : MonoBehaviour
{
NavMeshAgent navMeshAgent;
//public Transform target;
// Start is called before the first frame update
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent>();
}
// Update is called once per frame
void Update()
{
//navMeshAgent.SetDestination(target.position);
SetTargetByMouseClicking();
}
void SetTargetByMouseClicking()
{
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit,100f))
{
Debug.Log("HIT");
navMeshAgent.SetDestination(hit.point);
}
}
}
}
1 ответ
Камера находилась слишком далеко от местности. Строка if (Physics.Raycast(ray, out hit,100f)) указывает максимальное расстояние 100f, поэтому она будет достигать только самых высоких точек меша. Решением было переместить камеру ближе или увеличить это число.