Player controller development for mobile game

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
Player controller development for mobile game
Medium
~2-3 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Developing a Player Controller for Mobile Games

The player controller is the most tactile component of any game. A poor controller is immediately noticeable: input lag, inaccuracy, character drifting after releasing your finger. A good one is invisible because it does exactly what was expected.

Architecture: Separate Input, Logic, and Presentation

A common mistake: PlayerController.cs contains touch reading, movement physics, and animation calls all mixed together. This works until the first non-standard requirement—freezing the player in a cutscene, supporting a gamepad, adding auto-aim.

The correct structure:

  • InputReader — only reads touch/keyboard/gamepad via Input System Package. Publishes events (OnMove, OnJump, OnAttack), knows nothing about the player.
  • PlayerLocomotion — handles movement. Accepts Vector2 moveInput, manages CharacterController or Rigidbody. No direct Input reading.
  • PlayerAnimator — reads state from PlayerLocomotion (speed, isGrounded, isAttacking), manages Animator. Uses Animator.SetFloat with damping: animator.SetFloat("Speed", targetSpeed, 0.1f, Time.deltaTime).

This separation enables: testing logic without Input, plugging in AI controllers instead of the player, implementing replays by swapping InputReader.

Touch Control: Virtual Joystick vs Swipe vs Tap-to-Move

The choice of control scheme is a critical design decision that affects level design for the entire game.

Virtual joystick (floating joystick): best for action and platformers. Implementation: IPointerDownHandler captures the touch point, IDragHandler calculates offset, normalizes to Vector2. Important: don't pin the joystick position—a floating joystick (centered at the first touch point) is more ergonomic than fixed, reduces thumb fatigue.

Swipe controls for runners and puzzle-action: Vector2 delta = currentPos - startPos. If delta.magnitude > threshold && Time.time - touchStartTime < maxSwipeTime—it's a swipe. Direction—Mathf.Atan2(delta.y, delta.x), quantized to 4 or 8 directions.

Tap-to-move for isometric RPGs and strategy games: Camera.main.ScreenToWorldPoint(touch.position) → NavMesh Sample Position → NavMeshAgent.SetDestination. On mobile, showing a "destination marker" is critical—without it, players don't understand whether their tap registered.

Input Buffering and Game Feel

For action games: if the player pressed "attack" 2 frames before it's technically possible (character still in previous attack animation), the action should execute at the first opportunity—this is input buffering.

Implementation: Queue<PlayerAction> with TTL (time to live). On each FixedUpdate, check: is there a valid command in the buffer + can we execute it now? A 3–6 frame buffer (50–100ms at 60fps) makes controls significantly more responsive without changing game mechanics.

Timeline: a complete player controller with one control scheme, animations, and basic physics—2–4 weeks within a project.