Hand of God

A solo game project I developed during my junior year in the GIMM program and completed in the Spring of 2025. This multi-semester assignment challenged students to design and produce a fully interactive 3D game from the initial concept to the final deliverable.

A solo game project I developed during my junior year in the GIMM program and completed in the Spring of 2025. This multi-semester assignment challenged students to design and produce a fully interactive 3D game from the initial concept to the final deliverable.

The Game

Hand of God is a top-down AR/VR strategy game that uses hand tracking to immerse players in high-stakes decision-making and ethical dilemmas. Players control the weapons of a military drone circling high above them. By pinching their fingers, the drone fires missiles at targets selected through a ray-cast projected from the player's hand.

The missions are set in a dense urban environment where accuracy is critical. Missiles fired at the wrong time or location can result in the destruction of residential buildings, increasing unintended collateral damage. However, this destruction also allows for the map to become less dense, and will open opportunities for the player.

The Gameplay

In the first mission, two enemy tanks are actively searching for disabled-friendly transport. A narrator informs the player they have approximately two minutes before the tanks locate the transport. To succeed, the player must eliminate both tanks within the time limit. The mission fails if the transport is destroyed or either tank reaches it. The player must steady their nerves and their hands, as anything can happen out on the battlefield.

All of the 3D assets were created by me in Blender, and many were textured in Adobe Substance Painter. While all of the office scene assets were unwrapped and textured, the black and white assets used in the mission used vertex painting…

The game's visual style evolved over time and eventually landed on infrared white hot (WHOT). This style emulates real-life drone and aerial military photography. This decision not only made the game look visually different from other games, but it also reduced development time, as assets just needed to be painted in Blender. Closer inspection of buildings and vehicles reveals their unique heat signatures, as engine blocks, air conditioners, and high-friction areas all glow white while bare walls remain cooler. Assets, textures and everything 3D can be seen in the showreel below.

The Showreel

The Code

The core script to the game's functionality is the aptly named “HandofGod.cs”. This script deals with tracking the player's cursor in the scene, detecting a pinch action, and triggering the prefab missile to spawn on an empty object attached to the circling drone. Once spawned, the prefab will track the current cursor location and move toward it at a set speed. This script also allows for game balancing and additional features. If the player keeps their fingers pinched, the missile will actively follow the cursor, giving the player the ability to change the mid-air course of the missile at the cost of spending more time per shot. This script also houses a firing cooldown for the drone.

Through my UX testing, I discovered that once players realized they could repeatedly pinch their fingers endlessly, the game's challenge and focus on methodical accuracy shifted to how fast a player could pinch their fingers. A simple 1.5-2 second delay between shots drastically reduced player's urge to rapid-fire and allowed for a lower chance of performance issues, as simulating physics on the headset standalone is quite resource-intensive.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HandOfGod : MonoBehaviour
{
    public GameObject prefabToSpawn;
    public Transform spawnLocation;
    public Transform targetLocation;
    public float moveSpeed = 1.0f;
    public bool canChangeTarget = true;
    public float spawnCooldown = 1.5f;

    private float cooldownTimer = 0f; 
    private List spawnedObjects = new List();
    private GameObject newestSpawnedObject;
    private Dictionary objectTargetPositions = new Dictionary();

    void Update()
    {
        cooldownTimer += Time.deltaTime;

        foreach (GameObject obj in spawnedObjects)
        {
            MoveObjectToTarget(obj);
        }
        if (canChangeTarget && newestSpawnedObject != null)
        {
            objectTargetPositions[newestSpawnedObject] = targetLocation.position;
        }
    }
 public void SpawnAndMove()
    {
        if (cooldownTimer >= spawnCooldown)
        {
            newestSpawnedObject = Instantiate(prefabToSpawn, spawnLocation.position, spawnLocation.rotation);
            spawnedObjects.Add(newestSpawnedObject);
            objectTargetPositions[newestSpawnedObject] = targetLocation.position;
            cooldownTimer = 0f; 
        }
    }

    public void ToggleCanChangeTarget(bool value)
    {
        canChangeTarget = value;
        if (!canChangeTarget && newestSpawnedObject != null)
        {
            objectTargetPositions[newestSpawnedObject] = targetLocation.position;
        }
    }

    private void MoveObjectToTarget(GameObject obj)
    {
        if (obj != null && objectTargetPositions.ContainsKey(obj))
        {
            Vector3 targetPos = objectTargetPositions[obj];
            obj.transform.position = Vector3.MoveTowards(obj.transform.position, 
            targetPos, moveSpeed * Time.deltaTime

The Future

The Convoy:

  • Defending a convoy from ground troops emerging from buildings


The Parade:

  • A recently elected politician is celebrating his victory by revealing a statue built in his honor and driving through the city in a parade. The player is told the drone only has 1 missile onboard, and they must hit the politician's float. Upon impact, the warhead destroys not only the parade float but the entire city as well, as the fireball engulfs the entire map. This is the turning point of the game.


The Factory:

  • A small collection of block-style housing located near a nuclear power facility and other industrial complexes. The player is informed that there are no enemies in this area, but they are tasked at crippling the infrastructure in the region, set to target the power plant and factories


The Consulate:

  • An urban city with a fortified but elegant building in the center, walled off and barricaded from the public. A crowd of protestors has organized in front. Our client has requested us to act as security and eliminate targets trying to break into the walls of the consulate. After a few eliminations, the narrator tells the player that the client no longer likes the optics of using a drone for crowd control and won't pay for our services. The player may then choose to destroy the consulate or leave the area.


The Hospital:

  • Urban/residential area with low-rise buildings. The target for this mission just had an assassination attempt on his life. Currently being prepped for helicopter transport at the local hospital, the player is told this will be their only chance to get their mark. After some waiting, the helicopter is loaded, its engine begins to start, and its rotors begin to whirl. The player can either take the easy shot while the helicopter is sitting on the rooftop helipad and destroy the hospital in the process or take the more skilled, risky shot while the helicopter is in the air flying away.


Using the work already done in the first mission, creating these additional levels will become a streamlined process, as many of the mission-specific models are already completed, and they would only require narrative and mission win/lose logic added to them.

Contact

Résumé

Create a free website with Framer, the website builder loved by startups, designers and agencies.