Ось як я б спробував це зробити.
Поки ви знаходитесь на порталі, у фізичному двигуні буде дві копії програвача. Кожна копія ігнорує всі зіткнення, що знаходяться на протилежній стороні порталу, і ви потім комбінуєте результати та застосовуєте результати моделювання до обох моделей.
В ідеалі ви б застосували гравітацію окремо для кожної половини гравця, але, можливо, вам вдасться піти, просто застосувавши її до сторони порталу, на якому знаходиться центр маси гравця.
Щоб ігнорувати ці зіткнення, потрібно встановити відповідний об'єм і перевірити, чи є в ньому точка. Циліндр (можливо, розтягнутий вертикально) здавався б хорошим варіантом. Тест - це щось подібнеif (!collisionPoint.InsideCylinder(portal)) ProcessCollision(); else IgnoreCollision();
Я вважаю, що більшість фізичних двигунів мають систему фільтрації того, що об’єкт може зіткнутися, тому це повинно бути можливо за допомогою стандартного двигуна фізики. Наприклад, http://bulletphysics.org/mediawiki-1.5.8/index.php/Collision_Filtering#Custom_collision_filtering
Для комбінування результатів найпростішим варіантом було б, мабуть, додати якесь негнуче обмеження між ними, і дозволити фізичному двигуну впоратися з цим.