using NRKernal.NRExamples;
public class GemSpawner : MonoBehaviour
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);
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;
public void SpawnGem(GameObject plane)
var gemClone = Instantiate(GemPrefab);
gemClone.transform.position = FindRandomLocation(plane);
Gem = gemClone.GetComponent<GemBehaviour>();
if (Reticle.CurrentPlane != null)
SpawnGem(Reticle.CurrentPlane);