Add gems
Now that the player can control an entity in the scene, give the player a destination to drive towards.

Create GemSpawner
GemSpawnerIn Assets/Scripts, create a new script named
GemSpawner.This script defines how the gems are generated randomly on the current plane.
using NRKernal;
using NRKernal.NRExamples;
using UnityEngine;
public class GemSpawner : MonoBehaviour
{
public GemBehaviour Gem;
public GameObject GemPrefab;
public ReticleBehaviour Reticle;
public static Vector3 RandomInTriangle(Vector3 v1, Vector3 v2)
{
float u = Random.Range(0.0f, 1.0f);
float v = Random.Range(0.0f, 1.0f);
if (v + u > 1)
{
v = 1 - v;
u = 1 - u;
}
return (v1 * u) + (v2 * v);
}
public Vector3 FindRandomLocation(GameObject plane)
{
// Select random triangle in Mesh
var mesh = plane.GetComponent<PolygonPlaneVisualizer>().m_PlaneMesh;
var triangles = mesh.triangles;
var triangle = triangles[(int) Random.Range(0, triangles.Length - 1)] / 3 * 3;
var vertices = mesh.vertices;
var randomInTriangle = RandomInTriangle(vertices[triangle], vertices[triangle + 1]);
var randomPoint = plane.transform.TransformPoint(randomInTriangle);
randomPoint.y = Reticle.CurrentPlane.GetComponent<NRTrackableBehaviour>().Trackable.GetCenterPose().position.y;
return randomPoint;
}
public void SpawnGem(GameObject plane)
{
var gemClone = Instantiate(GemPrefab);
gemClone.transform.position = FindRandomLocation(plane);
Gem = gemClone.GetComponent<GemBehaviour>();
}
private void Update()
{
if (Reticle.CurrentPlane != null)
{
if (Gem == null)
{
SpawnGem(Reticle.CurrentPlane);
}
}
}
}Add the game element
Create a new empty
GameObjectin the Hierarchy.Rename it to
Gem Spawner.Select the object you created. In the Hierarchy pane, click Add Component to add the
GemSpawnercomponent to it.Set up
GemSpawner's dependencies by clicking on the chooser for the following field:Gem Prefab: In Assets, select Gem Prefab.
Reticle: In Scene, select Reticle Prefab.
Create GemBehaviour
GemBehaviourCreate a script named
GemBehaviourin PlaneDetectionStarterPackage folder. You needn't add anything else to this script.Associate
GemBehaviourwith Gem Prefab by editing Gem Prefab, clicking Add Component, and chooseGemBehaviouryou've created.
Modify Car Behaviour
In CarBehaviour you've previously created, add the following event function which defines the action when the car hits the gem.
private void OnTriggerEnter(Collider other)
{
var Gem = other.GetComponent<GemBehaviour>();
if (Gem != null)
{
Destroy(other.gameObject);
}
}Test the game
Click File > Build to test your changes. 2, After you create a car, a gem should spawn.
Drive your car to the gem.
A new one will appear at a random location.
Was this helpful?