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 это про физику, а задание скоростей вручную - нет.
Нормальная работа это Сила -> Ограничения -> Скорости, если ты прыгаешь через голову, то будь добр сам обрабатывать и учитывай ограничения.
Красные кресты, значит у тебя объект "вывернут на изнанку". У тебя какие-то компоненты изменяют размеры и привязку только при старте, а так они лежат поломанные.