Creating a horror game for Android is not only an opportunity to realize your darkest fantasies, but also a chance to make money on a popular genre. Mobile horror games, from psychological thrillers to jump-scare action games, occupy a stable niche injump scares), occupy a stable niche in Google Play, attracting millions of players. However, developing a truly atmospheric game that will scare and not make you laugh is a non-trivial task. Everything is important here: from the choice of engine to little things like sound design or optimization for weak smartphones.
In this guide, we will analyze the process of creating a horror game from Android from scratch: from concept formation to publication in the store. You will learn what tools to use (including free ones), how to avoid common beginner mistakes, and what technical nuances to consider so that the game does not lag on budget devices. And if you have never been involved in game development, donโt worry - we will give recommendations for any level of training, from a complete beginner to an experienced programmer.
1. Choosing a concept: what kind of horror do you want to create?
Before opening the engine, decide on genre niche your game. Horror on mobile platforms is conventionally divided into several types, each of which requires different approaches to gameplay and atmosphere:
- ๐ป Psychological horror - emphasis on tension, mystery and slow plot development (example: Year Walk). Plot twists and working with the playerโs imagination are important here.
- ๐ Slasher/action - dynamic chases, fights with monsters and abundant jump scares (example: Dead by Daylight Mobile). Requires high-quality animation and responsive controls.
- ๐๏ธ Stealth horror - the player must hide from enemies in a limited space (example: Five Nights at Freddyโs). The main thing is competent AI of opponents and a detection system.
- ๐ Visual novel - minimal gameplay, maximum text and atmosphere (example: Doki Doki Literature Club with a dark twist). Suitable for beginners as it does not require complex graphics.
Define also target audience. Teenagers 12โ16 years old prefer bright, but not too scary games (for example, Granny), while adult players value deep plots and non-linearity (Oxenfree). Think about whether your game will be:
- ๐ฎ Casual (simple controls, short sessions) or hardcore (complex mechanics, long playthroughs)?
- ๐ Linear (one story path) or with branches (the player's choice affects the ending)?
- ๐ฐ Paid (one-time purchase) or free-to-play (with advertising/donations)?
If you are a beginner, start with a simple project - for example 2D horror with a top-down view (how Silent Hill: Shattered Memories on mobile devices). Such games require fewer resources for development, but with the right approach they can be no less atmospheric than 3D projects.
2. Choosing an engine: Unity vs Godot vs Unreal Engine vs others
The engine determines how quickly you can implement your idea and what technical limitations await you. Let's consider the main options for Androiddevelopment:
| Engine | Pros | Cons | Suitable for |
|---|---|---|---|
| Unity | Rich ecosystem of plugins (for example Post Processing Stack for effects), good documentation, 2D/3D support. |
Paid license for companies with income >$100K, high hardware requirements for complex projects. | Any horror games, especially 3D with advanced graphics. |
| Godot | Free, lightweight, open source, perfectly optimized for mobile. | Fewer ready-made solutions for horror effects, smaller community than Unity. | 2D horror, prototypes, indie projects. |
| Unreal Engine | Best graphics (support ray tracing), ready-made solutions for lighting and particles. | Difficult for beginners, high device requirements, larger final APK size. | AAA-quality 3D horror with realistic graphics. |
| Construct 3 | Visual programming (no code), fast prototyping 2D games. | Limited capabilities for 3D, paid subscription for export to Android. | 2D horror for beginners (for example, point-and-click). |
For most beginners, the optimal choice is Unity or Godot. Unity allows you to use ready-made assets for horror effects (for example, shaders for blood or fog), and Godot is free and easier to learn for 2D projects. If you need photorealistic graphics, but are willing to spend time learning, try it Unreal Engine.
Example of minimum requirements for start:
- ๐ป For Unity/Godot: PC with 8 GB RAM, level video card GTX 1050 and SSD.
- ๐ฑ For testing: smartphone on Android 8.0+ (for example Redmi Note 10 or older).
If you choose Unity, install the version 2022 LTS โit is stable and supports mobile platforms well. Avoid alpha/beta versions for final projects!
3. Creating an atmosphere: sound, light and visual effects
Horror lives in detail. Even a simple game can scare the player if handled correctly. atmosphere. Here are the key elements to pay attention to:
Sound design
Sound in horror is responsible for 50% of the fear. Use:
- ๐ Ambient โ background noise (creaking doors, whispering, wind). You can download free samples to Freesound.org.
- ๐ต Dynamic music โtracks that change depending on the playerโs actions (for example, they speed up when a monster appears).
- ๐ฅ Jump scare sounds โshort sharp sounds (scream, blow). The main thing is not to overdo it, otherwise the player will get used to it.
For sound processing, the following apps are suitable:
- Audacity (free editor).
- FMOD or Wwise (for advanced mixing, integrated with Unity/Unreal).
Lighting and post-effects
Darkness is your best friend. The following techniques work in horror:
- ๐ Contrast lighting - bright light in a dark room (for example, a playerโs flashlight).
- ๐ซ๏ธ Fog - limits visibility and adds mystery.
- ๐๏ธ Effects distortion (for example,
Bloomfor glow orChromatic Aberrationto simulate stress).
In Unity these effects are configured via Post Processing Stack (install the package via Window โ Package Manager). Q Godot use shaders or a plugin Godot Post Processing.
How to make a realistic flashlight in Unity?
1. Create Spot Light and attach it to the player's camera. 2. Set Range (range) to 5โ7 units and Intensity to 2โ3. 3. Add Cookie (texture for the shape of the light) with jagged edges to make the light appear more natural.
Animation and models
For 3D horror:
- ๐ค Use ready-made models with Mixamo (free animations for characters) or Sketchfab (3D models under a CC license).
- ๐ง Low-poly models with an emphasis on deformations (for example, stretchable limbs) are suitable for monsters.
For 2D:
- ๐จ Draw sprites in Aseprite or Krita (free alternatives to Photoshop).
- ๐ป Effect โjitteringโ of sprites when danger approaches adds tension (configurable through scripts in Unity/Godot).
The cheapest way to create an atmosphere is to combine free assets (sounds, models) with custom shaders. For example, add a โbloodyโ screen effect when the playerโs health is low.
4. Gameplay programming: from movement to AI monsters
Even the most beautiful game will be useless without interesting gameplay. Let's look at the basic mechanics that are useful in horror:
Character control
For mobile games, it is important that the controls are intuitive. Popular schemes:
- ๐ฎ Virtual joystick (for example, plugin
Joystick Packfor Unity). - ๐ Swipe controls - swiping your finger to move (as in Temple Run).
- ๐ฑ๏ธ Point-and-click โ taps on the screen to interact with objects.
Example code for simple character movement in Unity (C#):
using UnityEngine;public class PlayerMovement : MonoBehaviour {
public float moveSpeed = 5f;
public VirtualJoystick joystick;
void Update() {
Vector3 direction = new Vector3(joystick.Horizontal(), 0, joystick.Vertical());
transform.Translate(direction moveSpeed Time.deltaTime);
}
}
Artificial intelligence for monsters
There should be AI in horror predictably unpredictable โ the player should not feel that the enemies are moving according to the script, but chaos is also not needed. Basic approaches:
- ๐ง Patrol-system โthe monster walks along given points until it notices the player.
- ๐ Field of view (FOV) โ the enemy reacts only if the player gets into the โcone of visibility.โ
- ๐ Chase โ after detection, the monster moves towards the player at a given speed.
Example script for simple AI on Unity:
public class EnemyAI : MonoBehaviour {public Transform player;
public float chaseRange = 10f;
public float moveSpeed = 3f;
void Update() {
float distance = Vector3.Distance(transform.position, player.position);
if (distance < chaseRange) {
transform.LookAt(player);
transform.Translate(Vector3.forward moveSpeed Time.deltaTime);
}
}
}
Fear and health system
In horror, instead of the classic "HP" is often used level of fear, which grows from:
- ๐จ Meetings with monsters.
- ๐ฆ Staying in the dark for a long time.
- ๐ง Loud sounds (jump scares).
Example implementations:
public class FearSystem : MonoBehaviour {public float fearLevel = 0f;
public float maxFear = 100f;
public GameObject gameOverScreen;
void Update() {
if (fearLevel >= maxFear) {
gameOverScreen.SetActive(true);
Time.timeScale = 0; // Stop the game
}
}
public void IncreaseFear(float amount) {
fearLevel += amount;
}
}
Create a character with controls|Customize the camera (1st or 3rd person view)|Add a monster with simple AI|Implement the fear/health system|Test on a mobile device-->
5. Optimization for Android: how to avoid lags and overheating
Mobile devices vary greatly in performance, and your game should run smoothly even on weak smartphones. Here are the key optimization points:
Graphics and performance
- ๐ Reduce the number of polygons in 3D models (the goal is no more than 5-10 thousand per screen).
- ๐ผ๏ธ Compress textures (smoke, blood) - they load the GPU heavily. to resolution
1024x1024(or512x512for 2D). Use the format for sprites with transparency and for backgrounds..PNGfor sprites with transparency and.JPGfor backgrounds. - ๐ณ Limit the number particles (smoke, blood) - they heavily load the GPU.
- ๐ฆ Turn off unnecessary light sources โin horror, 1-2 dynamic lamps are often enough.
In Unity turn on Occlusion Culling (in the menu Window โ Rendering โ Occlusion Culling) so that the engine does not render objects behind walls.
Build settings for Android
Before exporting APK:
- Go to
File โ Build Settings โ Android. - B
Player Settingsinstall:Target Architecture: ARM64 (main option) + ARMv7 (for old devices).Graphics API: only OpenGLES3 (universal for most smartphones).Compression Method: LZ4 (quick unpacking when installation).
Split Application Binaryso that the game weighs less than 100 MB (otherwise users will have to download an additional OBB file).Test the game on real devices, and not just in the emulator! For example, on Samsung Galaxy A10 (weak processor) and OnePlus 8 (flagship) - this is how you will see the difference in performance.
Working with memory
Mobile games are often closed due to lack of RAM. To avoid crashes:
- ๐๏ธ Destroy unnecessary objects (use
Object Poolingfor frequently created objects, such as bullets). - ๐ Unload unused assets using
Resources.UnloadUnusedAssets(). - ๐ฑ Limit FPS up to 30 or 60 (in
Application.targetFrameRate).
If the game weighs more than 150 MB, Google Play will require you to download it via Play Asset Delivery (PAD) or OBB file. Configure this in advance in Publish Settings!
6. Testing and debugging: catching bugs before release
Testing a horror game is not only about searching bugs, but also checking how much it is really scary. Here's how to organize the process:
Technical testing
Test the game on:
- ๐ฑ Different devices (minimum 3โ5 models with different chipsets: Snapdragon 4xx, Mediatek Helio, Kirin).
- ๐ Different versions of Android (from 8.0 to 14).
- ๐ฎ Different screen resolutions (from
720pto4K).
Use tools:
- Android Profiler (in Unity) - shows CPU/GPU consumption and memory.
- Logcat (in Android Studio) - to find errors in real time.
Gameplay testing
Invite 5-10 people (preferably not familiar with the game mechanics) and observe:
- ๐ฑ Do they react to jump scares (if not, the sound or timing is bad).
- ๐ค Do they understand what to do (if not, you need tips or a tutorial).
- ๐ด Do they lose interest after 5-10 minutes (if so, the gameplay is too monotonous).
Collect feedback using:
- ๐ Google Forms (questionnaire with questions like โWhat scared you the most?โ).
- ๐ฅ Screen recordings (applications like AZ Screen Recorder).
How to find testers for free?
Post a post in communities like r/playmygame (Reddit) or Indie Game Devs (Facebook). Offer testers access to the closed beta version in exchange for feedback.
Optimization before release
Before publication:
- ๐๏ธ Remove unnecessary assets (check the folder
Assets/Unusedin Unity). - ๐ Run the game via Unity Cloud Diagnostics (free for small projects).
- ๐ฆ Make sure that the APK size does not exceed 100 MB (otherwise users will download additional files).
If the game lags on weak devices, try disabling Real-time shadows i reduce Shadow Distance in the quality settings.
7. Publishing on Google Play: from account to monetization
When the game is ready, it's time to upload it to Google Play Console. Here is the step-by-step process:
Register a developer account
An account is required to publish Google Play Developer:
- Go to Google Play Console.
- Register (you will need to pay one-time fee $25).
- Fill out the developer's profile (name, logo, contacts).
Preparation of materials for the game page
You will need:
- ๐ธ Screenshots (minimum 2, preferably 4โ6; size
1920x1080). - ๐ฌ Video trailer (30โ60 seconds; can be taken in CapCut).
- ๐ Description (in Russian and English; use keywords: โhorror gameโ, โscary gameโ, โjump scareโ).
- ๐ท๏ธ Icon (size
512x512, without text). - ๐ ESRB/PEGI rating (for horror usually 12+ or 16+).
Example description for Google Play:
๐ Dive into the nightmarish world of [Game Name] - a new horror game for Android!๐ฆ You have to survive in [brief plot description], where every sound could be your last. Hide from monsters, solve riddles and try to maintain your sanity in an atmosphere of suffocating fear.
โ ๏ธ WARNING: The game contains sharp sounds and frightening moments. Not recommended for people with weak nerves!
๐ฎ Features:
โข [Feature 1]
โข [Feature 2]
โข [Feature 3]
๐ฅ Download [Game Name] right now and see if you have the courage to reach the end!
Monetization settings
Select an earnings model:
- ๐ฐ Paid game ($0.99โ$4.99) - suitable for niche projects with a unique gameplay.
- ๐บ Free with advertising - use AdMob (banners and videos between levels).
- ๐ Free with donations - sell skins, additional levels or disable advertising.
To integrate advertising in Unity:
- Install the package
Unity MonetizationviaWindow โ Package Manager. - Create an account in AdMob i get
App ID. - Add a script for displaying banners:
using UnityEngine;using UnityEngine.Advertisements;
public class AdManager : MonoBehaviour {
string gameId = "YOUR_GAME_ID"; // From AdMob
void Start() {
Advertisement.Initialize(gameId);
}
public void ShowBanner() {
Advertisement.Banner.Show("bannerPlacement");
}
}
To increase advertising revenue, place it at key moments: after the death of a player, between levels or during a pause. Do not overload the game with banners - this will irritate users!
Moderation and release
After downloading the APK, the game will undergo moderation (usually 1-3 days). Frequent reasons for rejection:
- ๐ Absent privacy policy (required even for free games).
- ๐ The age rating is not indicated or it does not correspond to the content.
- ๐ฑ The game crashes on Google test devices.
As soon as the game is published:
- ๐ข Launch a promotion on social networks (TikTok, Instagram Reels, YouTube Shorts).
- ๐ค Write to horror communities (for example, r/horrorgaming on Reddit).
- ๐ Track statistics in Google Play Console (installations, churn, income).
8. Promotion and updates: how to attract players
Even the highest quality game will not become popular without promotion. Here are working strategies for horror games on Android:
Free promotion methods
- ๐ฅ TikTok/YouTube Shorts - record 10-15 second videos with the most frightening moments. Use hashtags:
#horrorgame,#scarygame,#indiegame. - ๐ฌ Reddit and forums โpublish a post in r/AndroidGaming or 4PDA (the โGamesโ section).
- ๐ฑ Thematic groups in VK/Telegram โfor example, โThe best horror games on Android."
- ๐ฎ Game Jams - participate in competitions (for example, Ludum Dare) for free advertising.
Paid methods
If available budget:
- ๐ข Targeted advertising on Facebook/Instagram (target audience: 16โ30 years old, interests: โhorror gamesโ, โmobile gamingโ)
- ๐ค Collaboration with bloggers โsend game keys to small streamers (1โ10k subscribers) in exchange for a review.
- ๐ ASO (store optimization) โorder keyword optimization from specialists (cost: $50โ$200).
Updates and support
To retain players:
- ๐ Add new content (levels, monsters, story branches) once every 1-2 months.
- ๐ Fix bugs based on user reviews (monitor comments on Google Play).
- ๐ Hold events (for example, a Halloween update with an exclusive monster