In my experience building horror games, standard asset store templates usually fall into two traps: they are either tailored strictly for high-end Desktop PCs or stripped down so far for mobile that they lack basic mechanics like dynamic light flickering and inventory persistence. The Advanced Horror FPS Kit for Mobile and PC balances this gap surprisingly well. It delivers a modular architecture designed to handle cross-platform input without forcing you to maintain two separate codebases.
Under the hood, the core framework relies on a decoupled finite state machine (FSM) for character states (Idle, Walking, Running, Hiding, Crouch) combined with an event-driven interaction system. Instead of cluttering your update loops with constant raycasts, the interaction engine relies on target proximity triggers and interface-driven callbacks. Whether you are targeting an iOS device running metal APIs or a PC targeting 144 FPS with full URP post-processing, the code structure makes it straight-forward to toggle resource-heavy features on or off at runtime.
What makes this kit worth inspecting is its thoughtful handling of mobile hardware constraints without sacrificing classic FPS horror tropes. Here is a breakdown of the stand-out systems included in the project:
RuntimePlatform.Android / RuntimePlatform.IPhonePlayer).NavMeshAgent wrapped in a custom detection script supporting visual sight cones, noise radius triggers, and light detection flags.Honestly, you do not have to limit this asset strictly to traditional linear horror. The modular nature of the player movement and UI framework allows it to fit several project styles cleanly:
If your design centers around non-combat survival, inventory management, hiding in dark corners, and running from unkillable entities, this template gives you 80% of your foundational code on day one.
Thanks to the pre-built touch interface and item inspection system, creating claustrophobic indoor environments where players inspect keys, read documents, and solve combination locks is simple on touch devices.
While primarily focused on atmospheric survival, the raycast shooting and melee interaction interfaces can be quickly wired into simple weapon scripts to support low-ammo survival combat similar to early classic horror franchises.
Setting up the project requires a few deliberate pipeline steps to ensure your lighting and post-processing profiles render correctly across platforms.
Make sure your project is using the Universal Render Pipeline (URP). Navigate to Edit > Project Settings > Graphics and assign the included HorrorURPAsset to your Scriptable Render Pipeline Settings. This ensures lightweight forward rendering passes and custom render features for camera effects function properly.
Drop the [Player_Rig_Mobile_PC] prefab into your environment. Under the inspectable properties of the InputManager component, set your default platform override or leave it on Auto-Detect. Verify that your UI Canvas scaler is set to Scale With Screen Size with a reference resolution of 1920x1080 for proper virtual joystick anchoring.
To implement your own interactive horror objects (like a cursed key or sanity restoration station), create a script that implements the kit's base interaction contract. Here is a practical example of extending the framework to construct a dynamic sanity-restore zone:
using UnityEngine;
using System.Collections;
namespace HorrorKit.Extensions
{
public class SanityRestorationZone : MonoBehaviour
{
[Header("Zone Configuration")]
[SerializeField] private float restoreRate = 10f;
[SerializeField] private ParticleSystem auraVFX;
[SerializeField] private AudioClip zoneAmbientSFX;
private AudioSource audioSource;
private void Awake()
{
audioSource = GetComponent();
}
private void OnTriggerStay(Collider other)
{
// Verify collision with the kit's custom player controller tag
if (other.CompareTag("Player"))
{
var sanitySystem = other.GetComponent();
if (sanitySystem != null && !sanitySystem.IsSanityFull())
{
sanitySystem.ApplySanity(restoreRate * Time.deltaTime);
if (auraVFX != null && !auraVFX.isPlaying)
auraVFX.Play();
if (audioSource != null && !audioSource.isPlaying)
audioSource.PlayOneShot(zoneAmbientSFX);
}
}
}
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player") && auraVFX != null)
{
auraVFX.Stop();
}
}
}
}
Here is my honest takeaway on where this asset shines and where you will need to spend extra development time:
| Category | Templates / Systems |
|---|---|
| Latest Version | v7.2 (2 tracked releases) |
| File Size | 209.15 MB |
| Added to Platform | April 27, 2026 |
| Views | 11 views |
| Downloads | 5 downloads |
| Favourites | 0 favourites |
| Official Store | Buy Original License on Unity Asset Store → |
| Issue with Package? | Report Broken Link → |