Log in or register to post comments

Enable 3Dmodel from another script

December 20, 2016 - 7:28am #1

Hello,

 

I'm developping an app in which we enable a 3Dmodel depending on the string value of the Vumark. My Logic is to create two seperate scripts :

- The first one "VumarkCheck" is to detect the new vumark and extract its string value.

public class VumarkCheck : MonoBehaviour {

    private VuMarkManager mVuMarkManager;

    public Model3DScript model3DScript;

public GameObject[] Model3D = new GameObject[2];    //3d model of AR

 

    void Start()

    {

        model3DScript = new Model3DScript();

       

        // register callbacks to VuMark Manager

        mVuMarkManager = TrackerManager.Instance.GetStateManager().GetVuMarkManager();

        mVuMarkManager.RegisterVuMarkDetectedCallback(OnVuMarkDetected);

        mVuMarkManager.RegisterVuMarkLostCallback(OnVuMarkLost);

    }

    void OnDestroy()

    {

        // unregister callbacks from VuMark Manager

        mVuMarkManager.UnregisterVuMarkDetectedCallback(OnVuMarkDetected);

        mVuMarkManager.UnregisterVuMarkLostCallback(OnVuMarkLost);

    }

    public void OnVuMarkDetected(VuMarkTarget target)

    {

        string vumarkString = GetVuMarkString(target);

        Debug.Log("New VuMark: " + GetVuMarkString(target));

        model3DScript.Show3Dmodel(vumarkString);

    }

    public void OnVuMarkLost(VuMarkTarget target)

    {

        Debug.Log("Lost VuMark: " + GetVuMarkString(target));

    }

    private string GetVuMarkString(VuMarkTarget vumark)

    {

        switch (vumark.InstanceId.DataType)

        {

            case InstanceIdType.STRING:

                return vumark.InstanceId.StringValue;

        }

        return "";

    }

}

- The second one "Model3DScript" is to enable and disable Gameobject depending on the string value of the detected vumark.

public class Model3DScript : MonoBehaviour {

    //3d models

    public GameObject[] Model3D = new GameObject[2];    //3d model of AR



    public void Show3Dmodel (string VumarkString)

    {

  if (VumarkString = "XXX")

  {

        Model3D[0].SetActive(true);

  }

  else if (VumarkString = "YYY")

  {

   Model3D[0].SetActive(false);

   Model3D[1].SetActive(true);

  }

    }

}

I attached two gameobjects to my Array Model3D from the unity Inspector.

 

My problem is that each time, the Show3Dmodel method is called, I get an error message : "IndexArray is out of range".

 

I checked the elements of my Model3D array in Debug mode, I have found that my array contain null objects. But in the unity inspector, I see my Model3D in my array.

How can I solve this problem? I don't want to instantiate my Model3D array in the same script of VumarkCheck.

Log in or register to post comments