This is the second to last week working on our VR Hamster Ball game.
Tree Bounce Puzzle
During our meeting, we decided that the tree bounce puzzle should involve the water bowl. On the second floor, the water bowl is placed on top of the wooden overhang. The blue rock placed below the overhang serves to retrieve the water bowl. Blue arrows are placed on each palm tree as context clues. This is technically an optional puzzle, but it would be inconvenient to skip. The rock’s mass is five times heavier than the bowl. It would be harder to push it up a ramp which is the required mechanic needed to finish the next puzzle. Food pellets are placed alongside the water bowl to reinforce the act of the water bowl falling.
Better Context Clues
I swapped in the game ready food dispenser model.
- Programmed a script that spawns in food pellets from the food dispenser when the corresponding button is pressed.
- Made some water droplets that come out of the water canister. To improve performance, these objects have a delayed despawn after hitting the ground. This is meant to reinforce the action of pushing the buttons.
- Placed some food pellet underneath the food dispenser and made the water canister drip every few seconds. These clues will help players solve the puzzles while also enhancing the environment.
//Spawns an objects on a timer
public class ObjectSpawner : MonoBehaviour
public GameObject prefabToSpawn;
public float spawnRate = 0.1f;
public float objectsDissapearOnGroundTime = 0.2f;
public Vector3 spawnPositionRand = new Vector3 (0, 0, 0);
private float spawnTimer = 0;
// Update is called once per frame
void Update ()
spawnTimer -= Time.deltaTime;
if (spawnTimer < 0)
spawnTimer += spawnRate;
GameObject go = Instantiate (prefabToSpawn, transform.position, Quaternion.identity) as GameObject;
go.transform.position += new Vector3 (
Random.Range (-spawnPositionRand.x, spawnPositionRand.x),
Random.Range (-spawnPositionRand.y, spawnPositionRand.y),
Random.Range (-spawnPositionRand.z, spawnPositionRand.z));
//Add Extra Components
if (go.GetComponent<Collider> () == null)
if (go.GetComponent<Rigidbody> () == null)
//If we want the objects to dissapear
if (objectsDissapearOnGroundTime > 0 && go.GetComponent<Dissapear> () == null)
Dissapear dissapear = go.AddComponent<Dissapear> ();