- Home /
Having trouble instantiating with raycast using Google VR SDK and Cardboard
Hi guys! I'm creating a VR app for Cardboard and using the HelloVR demo scene as a little playground to test out some interactions. The Pop! Cardboard I'm testing on lacks a button and instead uses touch screen input. I have few teleporters set up using both gaze and pointer click detection to move the user around. There is also a planting area where the reticle changes from white to green to show the user they can plant flowers there. In the planting area, I am using a ray cast from the camera to instantiate flowers where the user clicks. It works beautifully in the editor, but when I run it on Android, everything works except the click to instantiate flowers. When I tap the screen, nothing happens. This is my first time developing in VR, so I'm having trouble understanding how the functions I normally use translate in the Google VR SDK. Does it have something to do with the event systems maybe? Does ScreenPointToRay even work with the VR SDK? I don't know!
Here's the code that works in the editor:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlantingZone : MonoBehaviour
{
MeshRenderer reticleRenderer;
public GameObject flowerPrefab;
public GameObject player;
private float groundLevel = 0.2f;
private bool canPlant = false;
// Start is called before the first frame update
void Start()
{
reticleRenderer = GameObject.Find("GvrReticlePointer").GetComponent<MeshRenderer>();
}
// Update is called once per frame
void Update()
{
}
public void GazeAt(bool gazing)
{
if (gazing)
{
//GetComponentInChildren<ParticleSystem>().Play();
//get color component in the reticle prefab and turn it to green
canPlant = true;
reticleRenderer.material.SetColor("_Color", Color.green);
}
else
{
//GetComponentInChildren<ParticleSystem>().Stop();
//get color component in the reticle prefab and turn it back to white
canPlant = false;
reticleRenderer.material.SetColor("_Color", Color.white);
}
}
public void PlantFlower()
{
if (canPlant)
{
Ray ray;
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit))
{
if (hit.collider != null)
{
//Debug.Log("Did Hit");
Instantiate(flowerPrefab, hit.point, Quaternion.identity);
}
}
}
}
}
Your answer