A mystery-detective game made in a 9-member team as part of Studio Centauri, the game development society of IIT Kanpur. The game was developed for BYOG Game Jam 2021, a 3-day game jam organized by Gamedev.in, a community of Indian game developers. The theme of the game jam that we used was “2 views”.
Who Done It? is a detective game where you dig into a murder case with differing points of view. There are 2 major witnesses to the murder, both of whom tell a different story. You have to look for clues, listen to witness testimonies for said clues, and piece-together what truly happened that fateful night!

Work done as part of the development process included:

// ClickManager.cs
void Update()
{
    if (Input.GetMouseButtonDown(0) && canClick)
    {
        Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(mRay, out hit, maxDistance, layerMask))
        {
            Debug.Log(hit.collider.gameObject.name + "  " + hit.point);
            if (hit.collider.gameObject.tag == "Ground")
            {
                player.GetComponent<PlayerMovement>().MovePlayer(hit.point);
            }
            else if (hit.collider.gameObject.tag == "Witness")
            {
                player.GetComponent<PlayerMovement>().MoveToTarget(hit.point);
                canClick = false;
                dialogueNPC = hit.collider.gameObject;
            }
            else if (hit.collider.gameObject.tag == "clue")
            {
                canClick = false;
                clueObject = hit.collider.transform.gameObject;
                Vector3 point = hit.point;
                point.y = 0;
                player.GetComponent<PlayerMovement>().MoveToTarget(point, true);
            }
        }
    }
}

// CameraMovement.cs
void FollowTarget()
{
    Vector3 direction = lookObject.transform.position - player.transform.position;
    direction.Normalize();
    Vector3 desiredForward = Vector3.Lerp(transform.forward, direction, moveFactor);
    Vector3 up = Vector3.up;
    Vector3 forward = desiredForward;
    Vector3 right = Vector3.Cross(up, forward);
    up = Vector3.Cross(forward, right);
    Vector3 desiredPos = player.transform.position +
        forward * dialogueOffset.z + up * dialogueOffset.y + right * dialogueOffset.x;
    transform.position = Vector3.Lerp(transform.position, desiredPos, moveFactor / 2.0f);
    transform.forward = Vector3.Lerp(transform.forward, 
                        (lookObject.transform.position - transform.position).normalized, moveFactor);
}
void SetupAR()
{
    Vector2 currentRes = new Vector2(Screen.width, Screen.height);
    Vector2 targetRes = currentRes;
    if ((dialogueAR.x / dialogueAR.y) > (currentRes.x / currentRes.y))
    {
        targetRes.y = (targetRes.x / dialogueAR.x) * dialogueAR.y;
    }
    else
    {
        targetRes.x = (targetRes.y / dialogueAR.y) * dialogueAR.x;
    }
    Vector2 offset = ((currentRes - targetRes) / currentRes) / 2.0f;
    offset = Vector2.Lerp(new Vector2(Camera.main.rect.x, Camera.main.rect.y), offset, moveFactor);
    targetRes /= currentRes;
    targetRes = Vector2.Lerp(new Vector2(Camera.main.rect.width, Camera.main.rect.height), 
                            targetRes, moveFactor);
    Camera.main.rect = new Rect(offset.x, offset.y, targetRes.x, targetRes.y);
}
