private void Awake() { myObjectRenderers = MyObject.GetComponentsInChildren <Renderer>(); //CODIGO RELACIONADO COM: INTERACAO MARCADORES marker1NewTrackableEventHandlerComponent = Marker1.GetComponent <NewTrackableEventHandler>(); marker2NewTrackableEventHandlerComponent = Marker2.GetComponent <NewTrackableEventHandler>(); //MENSAGEM ERRO MARKER SEM COMPONENTE NewTrackableEventHandler if (marker1NewTrackableEventHandlerComponent == null || marker2NewTrackableEventHandlerComponent == null) { if (marker1NewTrackableEventHandlerComponent == null) { Debug.LogError("AR Educational Framework Message: The ImageTarget: " + Marker1.name + " doesn't have NewTrackableEventHandler component. you need to substitute DefaultTrackableEventHandler component for it."); } if (marker2NewTrackableEventHandlerComponent == null) { Debug.LogError("AR Educational Framework Message: The ImageTarget: " + Marker2.name + " doesn't have NewTrackableEventHandler component. you need to substitute DefaultTrackableEventHandler component for it."); } this.enabled = false; //desativa o componente atual, porém ainda para este frame terminaria de executar o codigo de embaixo, e portanto usa-se return. return; //nao executar o codigo de embaixo para este frame, em conjunto com a linha anterior, apartir de aqui, é desativado o script atual e nao se executa o codigo de embaixo nem para terminar este frame. } //NOVO MENSAGEM ERRO OBJECT IS NOT CHILD OF MARKER if (!MyObject.transform.IsChildOf(Marker1.transform)) { Debug.LogError("AR Educational Framework Message: The ImageTarget: " + Marker1.name + " doesn't have child " + MyObject.name + " in the Unity hierarchy. you need to make the object: " + MyObject.name + ", child of the marker: " + Marker1.name + "."); this.enabled = false; //desativa o componente atual, porém ainda para este frame terminaria de executar o codigo de embaixo, e portanto usa-se return. return; //nao executar o codigo de embaixo para este frame, em conjunto com a linha anterior, apartir de aqui, é desativado o script atual e nao se executa o codigo de embaixo nem para terminar este frame. } }
public void StepOne() { Marker1.SetActive(true); Marker2.SetActive(true); Debug.Log("StepOneInit"); FindObjectOfType <DistanceCalculator>(); Step0.SetActive(false); Step1.SetActive(true); Step2.SetActive(false); Step3.SetActive(false); Step4.SetActive(false); Step5.SetActive(false); StartButton.SetActive(false); Hide1.SetActive(true); Next1.SetActive(true); Previous1.SetActive(false); }
public void StepTwo() { Debug.Log("StepTwoInit"); Step0.SetActive(false); Step1.SetActive(false); Step2.SetActive(true); Step3.SetActive(false); Step4.SetActive(false); Step5.SetActive(false); Previous1.SetActive(true); StartButton.SetActive(false); Hide1.SetActive(true); Next1.SetActive(true); Previous1.SetActive(true); Marker1.SetActive(false); Marker2.SetActive(false); }
private void Awake() { //CODIGO RELACIONADO COM: INTERACAO MARCADORES marker1NewTrackableEventHandlerComponent = Marker1.GetComponent <NewTrackableEventHandler>(); marker2NewTrackableEventHandlerComponent = Marker2.GetComponent <NewTrackableEventHandler>(); //MENSAGEM ERRO MARKER SEM COMPONENTE NewTrackableEventHandler if (marker1NewTrackableEventHandlerComponent == null || marker2NewTrackableEventHandlerComponent == null) { if (marker1NewTrackableEventHandlerComponent == null) { Debug.LogError("AR Educational Framework Message: The ImageTarget: " + Marker1.name + " doesn't have NewTrackableEventHandler component. you need to substitute DefaultTrackableEventHandler component for it."); } if (marker2NewTrackableEventHandlerComponent == null) { Debug.LogError("AR Educational Framework Message: The ImageTarget: " + Marker2.name + " doesn't have NewTrackableEventHandler component. you need to substitute DefaultTrackableEventHandler component for it."); } this.enabled = false; //desativa o componente atual, porém ainda para este frame terminaria de executar o codigo de embaixo, e portanto usa-se return. return; //nao executar o codigo de embaixo para este frame, em conjunto com a linha anterior, apartir de aqui, é desativado o script atual e nao se executa o codigo de embaixo nem para terminar este frame. } //MENSAGEM ERRO OBJECT IS NOT CHILD OF MARKER if (!MyObject.transform.IsChildOf(Marker1.transform)) { Debug.LogError("AR Educational Framework Message: The ImageTarget: " + Marker1.name + " doesn't have child " + MyObject.name + " in the Unity hierarchy. you need to make the object: " + MyObject.name + ", child of marker: " + Marker1.name + "."); this.enabled = false; //desativa o componente atual, porém ainda para este frame terminaria de executar o codigo de embaixo, e portanto usa-se return. return; //nao executar o codigo de embaixo para este frame, em conjunto com a linha anterior, apartir de aqui, é desativado o script atual e nao se executa o codigo de embaixo nem para terminar este frame. } //MENSAGEM DE ERRO SUB-OBJETO NAO É FILHO DO OBJETO if (TypeOfChange == TypeOfChanges.ChangeObjectProperties) { if (ChangeMaterials) { bool anySubObjectWithMaterialIsNotChildOfMyObject = false; for (int i = 0; i < SubObjectsWithMaterial.Length; i++) { GameObject subObjectWithMaterialA = SubObjectsWithMaterial[i].SubObjectWithMaterial;//obtemos o sub-objeto com material atual if (!subObjectWithMaterialA.transform.IsChildOf(MyObject.transform)) { Debug.LogError("AR Educational Framework Message: The object: " + subObjectWithMaterialA.name + " is not valid. you need to add a child of the object " + MyObject.name + " with a Renderer component, or the object " + MyObject.name + " itself if it is a primitive object from Unity with its Renderer component directly on it (e.g Cube, Sphere etc)."); anySubObjectWithMaterialIsNotChildOfMyObject = true; } } if (anySubObjectWithMaterialIsNotChildOfMyObject) { this.enabled = false; // desativa o componente atual, porém ainda para este frame terminaria de executar o codigo de embaixo, e portanto usa-se return. return; // nao executar o codigo de embaixo para este frame, em conjunto com a linha anterior, apartir de aqui, é desativado o script atual e nao se executa o codigo de embaixo nem para terminar este frame. } } } //CODIGO RELACIONADO COM: TROCAR OBJETO POR OUTRO //ACRESCENTA NA LISTA renderers do componente NewTrackableEventHandler do marker1, os renderer dos objetos myObject e o novo objeto newObject a trocar. isto pois o marker1 vai pular a ativacao desses renderer quando for vissivel na camera(nao ira ativar esses objetos quando for encontrado), ao inves disso, serao ativados diretamente por este codigo. NOTA: quando o marcador nao encontrado, aí sim marker1 vai desativar normalmente esses renderer. //--- if (TypeOfChange == TypeOfChanges.ChangeObject && this.enabled) { myObjectRenderers = MyObject.GetComponentsInChildren <Renderer>(); newObjectRenderers = NewObject.GetComponentsInChildren <Renderer>(); if (myObjectRenderers.Length > 0 && newObjectRenderers.Length > 0)//SÓ se o myObject e newObject tem componentes Renderer ira funcionar a caracteristica de trocar o objeto pelo outro { foreach (Renderer renderer in myObjectRenderers) { if (!marker1NewTrackableEventHandlerComponent.Renderers.Contains(renderer)) { marker1NewTrackableEventHandlerComponent.Renderers.Add(renderer); } } foreach (Renderer renderer in newObjectRenderers) { if (!marker1NewTrackableEventHandlerComponent.Renderers.Contains(renderer)) { marker1NewTrackableEventHandlerComponent.Renderers.Add(renderer); } } //MENSAGEM ERRO OBJECT IS NOT CHILD OF MARKER if (!NewObject.transform.IsChildOf(Marker1.transform)) { Debug.LogError("AR Educational Framework Message: The ImageTarget: " + Marker1.name + " doesn't have child " + NewObject.name + " in the Unity hierarchy. you need to make the object: " + NewObject.name + ", child of marker: " + Marker1.name + "."); this.enabled = false; //desativa o componente atual, porém ainda para este frame terminaria de executar o codigo de embaixo, e portanto usa-se return. return; //nao executar o codigo de embaixo para este frame, em conjunto com a linha anterior, apartir de aqui, é desativado o script atual e nao se executa o codigo de embaixo nem para terminar este frame. } } else { if (myObjectRenderers.Length == 0) { Debug.LogError("AR Educational Framework Message: The GameObject: " + MyObject.name + " doesn't have any Renderer component."); } if (newObjectRenderers.Length == 0) { Debug.LogError("AR Educational Framework Message: The GameObject: " + NewObject.name + " doesn't have any Renderer component."); } this.enabled = false; //desativa o componente atual, porém ainda para este frame terminaria de executar o codigo de embaixo, e portanto usa-se return. return; //nao executar o codigo de embaixo para este frame, em conjunto com a linha anterior, apartir de aqui, é desativado o script atual e nao se executa o codigo de embaixo nem para terminar este frame. } } //--- if (typeOfChange == TypeOfChanges.ChangeObjectProperties) { if (changeScale) { //CODIGO RELACIONADO COM: BLOQUEAR BOTOES QUANDO MARCADORES JUNTOS MUDANDO ESCALA objectsWithButtonOperations = GameObject.FindObjectsOfType <ButtonOperations>(); //obtem todos os componentes de tipo ButtonOperations, ou seja deve obter (implicitamente) os botoes que podem mudar escala foreach (ButtonOperations obj in objectsWithButtonOperations) //percorre o vector e coloca numa lista só os componentes que sao usados para escalar(nao pra rotacionar) { if (obj.TypeOfOperation == ButtonOperations.TypeOfOperations.scale) //se está sendo usado para escalar { objectsWithButtonOperationsF.Add(obj); } } //---- //CRIAR O OBJETO EMPTY PARA O objeto myObject (NO CASO DE NAO TER) E ACRESCENTAR ELE NA LISTA GERAL DE OBJETOS EMPTY INTERMEDIARIOS USADOS PARA ESCALAR OBJETOS PROPORCIONALMENTE //NOTA: PARA ESTE TRECHO DE CODIGO, FOI NECESSARIO QUE O MARKER1 FOSSE CONSIDERADO COMO MARCADOR VINCULADO AO OBJETO E MARKER2 COMO MARCADOR DE CONTROLE List <GameObject> originalObjects = new List <GameObject>(); foreach (GeralObjectsContainer geralObjectContainer in ButtonOperations.GeralObjectsContainerList)//PERCORRE E OBTEM LISTA GERAL DE OBJETOS USADOS PARA ESCALAR PROPORCIONALMENTE { originalObjects.Add(geralObjectContainer.OriginalObject); } if (!originalObjects.Contains(MyObject)) //nao foi acrescentado o myObject atual na lista geral (ou seja nao sera mudada sua transform atraves de botoes), entao neste codigo deve se acrescentar nessa lista geral para mudar escala com marcadores { GameObject objEmty = new GameObject(MyObject.name + "Emty"); //cria um objeto emty novo com o mesmo nome do que o myObject atual objEmty.transform.localPosition = Marker1.transform.localPosition; //posiciona ele no mesmo lugar do marcador atual objEmty.transform.parent = Marker1.transform; //fazer myObject emty filho do marcador, necessario para nao tirar o myObject do seu contexto inicial quando for colocado como filho do emty objEmty.transform.localScale = Vector3.one; //IMPORTANTE RESET O VALOR A 1,1,1 POIS SE O MARCADOR NAO TEM TANAHO 1,1,1, O OBJ EMTY QUANDO SE FAZ FILHO DO MARCADOR FICARIA COM OUTRO TAMANHO E DARIA ERRADO AS OPERACOES MATEMATICAS DO ALGORITMO //CODIGO RELACIONADO COM: SUPORTAR IMAGENS EM CANVAS PARA SEREM ESCALADAS Transform myParent = MyObject.transform.parent; if (!(UnityEngine.Object.ReferenceEquals(myParent, Marker1)) && (myParent.GetComponent <Canvas>() != null)) //se pai do objeto myObject nao for marcador e for um canvas { objEmty.transform.SetParent(myParent.transform); //fazer o objEmty filho do canvas objEmty.transform.localScale = Vector3.one; //IMPORTANTE RESET O VALOR A 1,1,1 POIS SE O CANVAS NAO TEM TANAHO 1,1,1, O OBJ EMTY QUANDO SE FAZ FILHO DO CANVAS FICARIA COM OUTRO TAMANHO E DARIA ERRADO AS OPERACOES MATEMATICAS DO ALGORITMO } //--- MyObject.transform.SetParent(objEmty.transform); //fazer myObject filho do objeto empty GeralObjectsContainer geralObjectN = new GeralObjectsContainer(MyObject, objEmty); //acrescenta na lista geral myObject e seu empty criado ButtonOperations.GeralObjectsContainerList.Add(geralObjectN); } } } //CODIGO RELACIONADO COM: BLOQUEAR OUTROS CHANGEELEMENT QUANDO UN DELES jÁ ESTA TROCANDO O OBJETO if (myObjectRenderers.Length > 0 && newObjectRenderers.Length > 0)//SÓ se o myObject e newObject tem componentes Renderer ira funcionar a caracteristica de trocar o objeto pelo outro { changeElementComponents = GameObject.FindObjectsOfType <ChangeElement>(); foreach (ChangeElement changeElement in changeElementComponents) { if (!(UnityEngine.Object.ReferenceEquals(changeElement, this)) && changeElement.TypeOfChange == ChangeElement.TypeOfChanges.ChangeObject && UnityEngine.Object.ReferenceEquals(changeElement.MyObject, MyObject)) //se o componente changeElement nao for o atual, e estiver mudando o mesmo objeto que este { othersChangeElementComponentsChangingMyObject.Add(changeElement); //acrescenta na lista othersChangeElementComponentsChangingMyObject os changeElement que podem mudar o objeto, exetuando o atual changeElement } } } }