Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UnityPlayerPractivity全局初始化_Java_C#_Android_Unity3d_Vuforia - Fatal编程技术网

Java UnityPlayerPractivity全局初始化

Java UnityPlayerPractivity全局初始化,java,c#,android,unity3d,vuforia,Java,C#,Android,Unity3d,Vuforia,如果你能就我的问题提出建议,我将不胜感激 我正在使用适用于Unity3D和Android插件的Vuforia SDK开发AR应用程序。 我的场景中有几个ImageTargets和3D模型。 我使用android插件的类如下所示: public class AssetBundleAugmenter : MonoBehaviour, ITrackableEventHandler { void Start() { StartCoroutine(DownloadA

如果你能就我的问题提出建议,我将不胜感激

我正在使用适用于Unity3D和Android插件的Vuforia SDK开发AR应用程序。 我的场景中有几个ImageTargets和3D模型。 我使用android插件的类如下所示:

public class AssetBundleAugmenter : MonoBehaviour, ITrackableEventHandler
{    
    void Start()
    {
        StartCoroutine(DownloadAndCache());
        mTrackableBehaviour = GetComponent<TrackableBehaviour>();
        if (mTrackableBehaviour)
        {
            mTrackableBehaviour.RegisterTrackableEventHandler(this);
        }
        init();        
    }
    public void OnTrackableStateChanged(
    TrackableBehaviour.Status previousStatus,
    TrackableBehaviour.Status newStatus)
    {
        if (newStatus == TrackableBehaviour.Status.DETECTED ||
        newStatus == TrackableBehaviour.Status.TRACKED ||
        newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            if (!mAttached && mBundleInstance)
            {
                // if bundle has been loaded, let's attach it to this trackable
                //...        
            }
            OnTrackingFound();
        }
        else
        {
            OnTrakingLost();

        }

    }  

     private void OnTrackingFound()
     {
         if (mTrackableBehaviour is ImageTargetAbstractBehaviour)
         {
             GetJavaObject().Call("OnMarkerFound");
         }
     }   

    void onButtonClicked(int index)
    {
        //Changing current 3D model material
    }

#if UNITY_ANDROID
        private AndroidJavaObject javaObj = null;
        //LISTENING TO BUTTON CLICK EVENTS FROM ANDROID
        private sealed class EventListner : AndroidJavaProxy
        {
            private AssetBundleAugmenter mReceiver;

            public EventListner(AssetBundleAugmenter receiver)
             : base("com.mypackage.myapp.ImageTargetTracker$Listner")
            {
                mReceiver = receiver;
            }

            public void onButtonClicked(int index) //change color of model
            {
                mReceiver.onButtonClicked(index);
            }
        }


        private AndroidJavaObject GetJavaObject()
        {
            if (javaObj == null)
            {
                javaObj = new AndroidJavaObject("com.mypackage.myapp.ImageTargetTracker");
            }
            return javaObj;
        }
        AndroidJavaObject activity;
        private void init()
        {
            // Retrieve current Android Activity from the Unity Player
            AndroidJavaClass jclass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            activity = jclass.GetStatic<AndroidJavaObject>("currentActivity");

            // Pass reference to the current Activity into the native plugin,
            GetJavaObject().Call("setActivity", activity, new EventListner(this));

        }   


    #else
        void init() {}
    #endif
}

那么,我如何在Unity中一次性全局初始化活动和插件类,并在我的所有脚本中使用它们呢?

如评论中所述,我建议使用该模式。

如评论中所述,我建议使用该模式。

是否值得使用?@StevenCoull,谢谢,它现在似乎可以工作了。但现在,我不确定如何实现我的侦听器接口。我应该在我的单人课上宣布吗?太棒了,你是怎么做到的?我不确定你是否需要为一个监听器使用单例模式,你能更详细地解释一下你希望监听器做什么吗?终于成功了。我将密封的类移动到Singleton类中,并在其中实现了onClick方法。是的,单例模式非常适合这种情况。我遵循这个教程真棒!现在,我将坚持这一点作为答案,然后它是否值得使用?@StevenCoull,谢谢你,它现在似乎起作用了。但现在,我不确定如何实现我的侦听器接口。我应该在我的单人课上宣布吗?太棒了,你是怎么做到的?我不确定你是否需要为一个监听器使用单例模式,你能更详细地解释一下你希望监听器做什么吗?终于成功了。我将密封的类移动到Singleton类中,并在其中实现了onClick方法。是的,单例模式非常适合这种情况。我遵循这个教程真棒!现在我将坚持这一点作为答案
public class ImageTargetTracker {
    public static interface Listner {
        public void onButtonClicked(int index);
    }
    private Listner mListner;
    protected Activity mCurrentActivity;
    public void setActivity(Activity activity, Listner listner)
    {
        mCurrentActivity = activity;
        mListner = listner;

        mCurrentActivity.runOnUiThread(new Runnable() {
            public void run() {
                LayoutInflater inflater = mCurrentActivity.getLayoutInflater();
                Resources resources =  mCurrentActivity.getResources();
                String pkgName = mCurrentActivity.getPackageName();

                int id = resources.getIdentifier("camera_layout", "layout", pkgName);
                View view = inflater.inflate(id, null);

                mCurrentActivity.addContentView(view, param);
                //INITIALIZING UI ELEMENTS HERE (DISPLAYED ON TOP OF CAMERA)
    }


    public void OnMarkerFound(){

        mCurrentActivity.runOnUiThread(new Runnable() {
            public void run() {
                //Showing some UI elements
            }
        });
    }
}