VR Time-Control Shooter Demo

VR Time-Control Shooter Demo

VR Time-Control Shooter Demo

BACKGROUND

  • Designed a Superhot-inspired time-scaling mechanic that matches enemy speed to player movement.

  • Built stylized environments with baked global illumination, real-time lighting, and post-processing.

  • VR gunplay and object-throwing interactions.

INTERACTION WAYS

INTERACTION WAYS

  • The faster the player moves, the faster enemies accelerate

  • Combat supports both gunplay and physics-based object throwin

  • Sound effects feedback

DEVELOP TOOLS

DEVELOP TOOLS

  • Unity

  • Maya

  • C# Programming

01 Pick up weapons

01 Pick up weapons

01 Pick up weapons

02 Shoot long-range enemies

02 Shoot long-range enemies

02 Shoot long-range enemies

03 Attack close-range enemies with a hammer

03 Attack close-range enemies

with a hammer

03 Attack close-range enemies

with a hammer

04 Combat mirror real-world actions

04 Combat mirror real-world

actions

04 Combat mirror real-world

actions

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

public class AgentAnimation : MonoBehaviour
{
    public static Animator agentAnimator;
    public GameObject player;
    float disBetweenAgentPlayer;
    static public bool isDead = false;
    Vector3 enemyPos;
    public float speed = 1;


    void Start()
    {
        agentAnimator = GetComponent<Animator>();
    }


    void Update()
    {
        if (isDead == false) {
            Vector3 direction = player.transform.position - transform.position;
            gameObject.transform.rotation = Quaternion.LookRotation(direction);
            disBetweenAgentPlayer = Vector3.Distance(transform.position, player.transform.position);

            if (disBetweenAgentPlayer > 10)
            {
                agentAnimator.SetBool("isWalking", false);
                agentAnimator.SetBool("isIdleing", true);
                agentAnimator.SetBool("isAttacking", false);
                Debug.Log("idle" + this.gameObject.name +" distance to player is:" +disBetweenAgentPlayer );

            }
            else if (disBetweenAgentPlayer > 1 && disBetweenAgentPlayer <= 10)
            {
               // transform.position = Vector3.MoveTowards(transform.position, player.transform.position, speed * Time.deltaTime);
                 // enemyPos = Vector3.MoveTowards(transform.position, player.transform.position, speed * Time.deltaTime);
                //  enemyPos.y = 0;
                agentAnimator.SetBool("isWalking", true);
                agentAnimator.SetBool("isAttacking", false);
                Debug.Log("walking" + this.gameObject.name +" distance to player is:" +disBetweenAgentPlayer );
            }
            else
            {  
                agentAnimator.SetBool("isWalking", false);
                agentAnimator.SetBool("isIdleing", true);
                float dotProduct = Vector3.Dot(Camera.main.transform.forward, transform.forward);
           //     Debug.Log("dotProduct" + dotProduct);
                if (dotProduct < -0.8f)
                {
                    agentAnimator.SetBool("isAttacking", true);
                    agentAnimator.SetBool("isIdleing", false);
                }
                else
                {
                    agentAnimator.SetBool("isAttacking", false);
                    agentAnimator.SetBool("isIdleing", true);
                }
            }

        }
    }
}