Выделение происходит по рендерингу, если ни чего не отобразилось, то и выделять нечего. То что там где-то в одной из переменных лежит меш, не даёт ни как правил, где на экране он типа должен быть.
If you use IsPointerOverGameObject() without a parameter, it points to the "left mouse button" (pointerId = -1); therefore when you use IsPointerOverGameObject for touch, you should consider passing a pointerId to it.
Если у тебя dll это .NET сборка, то ставишь там "для любых платформ". Если же это нативная библиотека, то нужно её собирать под каждую платформу отдельно. Для андроид для этого есть NDK.
Потому что RB это про физику, а задание скоростей вручную - нет.
Нормальная работа это Сила -> Ограничения -> Скорости, если ты прыгаешь через голову, то будь добр сам обрабатывать и учитывай ограничения.