- Home /
The question is answered, right answer was accepted
Enable/Disable JS Script Problem (AR) using CS
Hi, i make an Augmented Reality Project use CS Script (DefaultTrackableEventHandler.cs) for enable and disable my JS Script Button (GUImenuTEST.js)
This my sample script :
using UnityEngine;
public class DefaultTrackableEventHandler : MonoBehaviour,
ITrackableEventHandler
{
private TrackableBehaviour mTrackableBehaviour;
private GUImenuTEST jsScript;
void Start()
{
jsScript = GetComponent<GUImenuTEST>();
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
}
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
//THIS ERROR MESSAGE = error CS0120: An object reference is required to access non-static member `UnityEngine.Behaviour.enabled'
GUImenuTEST.enabled = !GUImenuTEST.enabled;
}
else
{
OnTrackingLost();
}
}
private void OnTrackingFound()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
foreach (Renderer component in rendererComponents)
{
component.enabled = true;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
}
private void OnTrackingLost()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
foreach (Renderer component in rendererComponents)
{
component.enabled = false;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
}
}
But, i have a error message like this " An object reference is required to access non-static member `UnityEngine.Behaviour.enabled' " on this code " GUImenuTEST.enabled = !GUImenuTEST.enabled; "
So, how to fix it ? How to if i want to disable my Button Script (GUImenuTEST.js) if start running, and then will enable when TrackingFound, and disable again when TrackingLost ? Please, help :)
Answer by mohanrao164 · Jan 16, 2014 at 09:57 AM
replace this code
jsScript = (GUImenuTEST)findObjectOfType(typeof(GUImenuTEST));
and place the GUImenuTEST script in plugins folder.then only u can call javascript in C#
Thanks for answer, but i still have an error message :(
"Assets/Qualcomm Augmented Reality/Scripts/DefaultTrackableEventHandler.cs(32,49): error CS0103: The name `findObjectOfType' does not exist in the current context"
add this header using System.Collections; and did u place script in plugins folder and it is FindObjectOfType not findObjectOfType the starting letter should be capital
ok can i see what are you calling in start function and also try your default code once i.e jsScript = GetComponent(); and check both conditions once.
Sorry its work, but how to disable/enable my GUImenuTEST.js ? I mean, how to if i want to disable my Button Script (GUImenuTEST.js) if start running, and then will enable when TrackingFound, and disable again when TrackingLost ?
using UnityEngine;
using System.Collections;
public class DefaultTrackableEventHandler : $$anonymous$$onoBehaviour,
ITrackableEventHandler
{
private TrackableBehaviour mTrackableBehaviour;
private GUImenuTEST jsScript;
void Start()
{
jsScript = GetComponent<GUImenuTEST>();
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
}
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRAC$$anonymous$$ED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRAC$$anonymous$$ED)
{
OnTrackingFound();
jsScript = (GUImenuTEST)FindObjectOfType(typeof(GUImenuTEST));
}
else
{
OnTrackingLost();
}
}
private void OnTrackingFound()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
foreach (Renderer component in rendererComponents)
{
component.enabled = true;
}
foreach (Collider component in colliderComponents)
{
component.enabled = true;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
}
private void OnTrackingLost()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
foreach (Renderer component in rendererComponents)
{
component.enabled = false;
}
foreach (Collider component in colliderComponents)
{
component.enabled = false;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
}
}
Follow this Question
Related Questions
How do I make a function not appear on UnityEvents / Button OnClick lists? 0 Answers
How to toggle object visibility with keyboard button? 1 Answer
how I can hide a canvas in Unity and shows it after some days using C# Script ? 1 Answer
Cloud recognition in Vuforia 0 Answers
Hide virtual object behind real object detect by Vuforia 0 Answers