В настоящее время я пытаюсь работать с дополнением реальности в android. Для этой задачи я использую Unity
+ Vuforia
.Получить объект модели с ImageTarget Android
Итак, я создал сцену, которая работает, когда я смотрю на конкретный объект с моей камеры, он показывает мне мою модель (в основном модель 3d-кота с анимацией). Я сделал это в соответствии с учебниками, например: text format tutorial и видео на YouTube: video tutroial.
После этого я сделал андроид приложение, основанное на этом scene
, как это:
В результате Android проект, который в основном имеет один Activity
и Banch из assets
и libs
. Единственная связь с Unity
, что я вижу до сих пор является UnityPlayer
класса, но это просто ViewGroup
, простирались от FrameLayout
public class UnityPlayer extends FrameLayout implements com.unity3d.player.a.a
Моей цели: мне нужно переопределить onClick
на виде из Unity
, что я имею (мой 3d-кошка), что-то вроде того, когда вы нажимаете на кошку на своем телефоне, это произведет какой-то звук и добавит некоторую анимацию к нему после нажатия. У меня есть модель на scene
, просто логически он был преобразован в View
класс внутри Android
, и я подумал, что это просто ребенок UnityPlayer
, но такой код:
mUnityPlayer.getChildAt(0).setOnClickListener
не имеет никакого эффекта.
Я хочу либо иметь какой-то объект, который будет содержать все анимации и другие свойства, модель единства, или, если это невозможно, узнать, как установить OnClick слушателей в самой Unity
Я понимаю, что этот вопрос может быть неясным, и я хотел бы более подробно объяснить это тем, кто попытается помочь.
Если вам нужна дополнительная информация, просто спросите об этом в комментариях. Благодаря
Edit: Как ответ предлагал, я мог бы просто написать сценарий для этого, который я сделал, для использования VirtualButton
, это выглядит следующим образом:
using UnityEngine;
using System.Collections.Generic;
using Vuforia;
public class VirtualButtonEventHandler : MonoBehaviour, IVirtualButtonEventHandler {
// Private fields to store the models
private GameObject kitten;
private GameObject btn;
/// Called when the scene is loaded
void Start() {
// Search for all Children from this ImageTarget with type VirtualButtonBehaviour
VirtualButtonBehaviour[] vbs = GetComponentsInChildren<VirtualButtonBehaviour>();
for (int i = 0; i < vbs.Length; ++i) {
// Register with the virtual buttons TrackableBehaviour
vbs[i].RegisterEventHandler(this);
}
// Find the models based on the names in the Hierarchy
kitten = transform.FindChild("kitten").gameObject;
btn = transform.FindChild("btn").gameObject;
kitten.SetActive(false);
btn.SetActive(true);
}
/// <summary>
/// Called when the virtual button has just been pressed:
/// </summary>
public void OnButtonPressed(VirtualButtonAbstractBehaviour vb) {
//Debug.Log(vb.VirtualButtonName);
//GUI.Label(new Rect(0, 0, 10, 5), "Hello World!");
}
/// Called when the virtual button has just been released:
public void OnButtonReleased(VirtualButtonAbstractBehaviour vb) {
}
}
Как вы можете видеть, в Start()
метод я хочу найти и модель шкуры, которая называется kitten
, но это не скрывает
Я приложил этот сценарий для виртуального объекта кнопки, я обеспечу экран:
Edit: Моя ошибка на самом деле, по какой-то причине, я должен был приложить VirtualButtonBehaviorHandler
сценарий к ImageTarget
, это не так просто понять, для меня, но я думаю, что я вижу некоторую логику его прямо сейчас , Но, по какой-то причине неизвестная, если я добавить этот код:
public void OnButtonPressed(VirtualButtonAbstractBehaviour vb) {
//Debug.Log(vb.VirtualButtonName);
switch(vb.VirtualButtonName) {
case "btn":
kitten.setActive(true);
break;
}
}
Он работает мгновенно, даже не касаясь кнопки
Заключительный изменить: Это произошло, потому что я добавил свою кнопку в базу данных .xml
, когда я удалил из нее кнопку - все сработало, я отмечаю единственный ответ как правильный, потому что это помогло мне
Да, ваш ответ очень полезен, как вы уже упоминали, все в основном GameObject, и я сделал scprit для использования виртуальной кнопки, единственная проблема здесь , он вообще не работает, я внес изменения в свой вопрос, пожалуйста, посмотрите, когда у вас есть свободное время –
привет, пожалуйста, проверьте отредактированный ответ и позвольте спросить, есть ли у вас какие-либо трудности снова –