我从朋友那里收到一个统一项目,以unity3d统一完成它的android app上的工作,因此在打开该项目后,当我尝试从场景模式播放动画时,它不起作用,并且此消息显示在控制台中:
NullReferenceException: Object reference not set to an instance of an objectcharacter.Update () (at Assets/character.cs:64)UnityEditor.Toolbar:OnGUI()

我的统一版本是(5.5.1f1),我的朋友版本是(5.5.0f3)。
这是我的代码:

character.cs

using System.Collections;
using System.Collections.Generic;

using UnityEngine;

public class character : MonoBehaviour {

// Use this for initialization
private Animator avatarAnimator;
public words passingtext;
private AndroidJavaObject VoicePlug = null;
private AndroidJavaObject activityContext = null;

void Start()
{
    avatarAnimator = gameObject.GetComponentInChildren<Animator>();

    if (VoicePlug == null)
    {
        using (AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            activityContext = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
        }

        using (AndroidJavaClass pluginClass = new AndroidJavaClass("com.bas.MyProject.VoicePlug"))
        {
            if (pluginClass != null)
            {
                VoicePlug = pluginClass.CallStatic<AndroidJavaObject>("instance");
                VoicePlug.Call("setContext", activityContext);
                activityContext.Call("runOnUiThread", new AndroidJavaRunnable(() => {}));
            }
        }
    }
}

Dictionary<string, int> signs = new Dictionary<string, int>()
{
        {"start", 0},
        {"hello", 1},


};


// Update is called once per frame
void Update () {
    if (signs.ContainsKey(passingtext.gettext()))
    {
         avatarAnimator.SetInteger("stateNum", signs[passingtext.gettext()]);

    }
    else
    {
        //message for unstored signs
        VoicePlug.Call("showMessage", "sorry I can't understand you");
        passingtext.settext(" ");
    }

}
}

最佳答案

您可以在Android设备上运行游戏。您拥有仅适用于android的代码。请参见:https://docs.unity3d.com/Manual/PlatformDependentCompilation.html

为了确保编辑器中没有错误,以便您可以在编辑器中测试应用程序以进行开发。采用

如果(!Application.isEditor)

Application.isEditor在Unity中运行时为true,在游戏在android或其他平台上运行时为false。

如下所示编辑您的代码

    public class character : MonoBehaviour {

   // Use this for initialization
    private Animator avatarAnimator;
    public words passingtext;
    private AndroidJavaObject VoicePlug = null;
    private AndroidJavaObject activityContext = null;

    void Start()
    {
        avatarAnimator = gameObject.GetComponentInChildren<Animator>();
        if (!Application.isEditor)
        {
            if (VoicePlug == null)
            {
                using (AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
                {
                    activityContext = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
                }

                using (AndroidJavaClass pluginClass = new AndroidJavaClass("com.bas.MyProject.VoicePlug"))
                {
                    if (pluginClass != null)
                    {
                        VoicePlug = pluginClass.CallStatic<AndroidJavaObject>("instance");
                        VoicePlug.Call("setContext", activityContext);
                        activityContext.Call("runOnUiThread", new AndroidJavaRunnable(() => { }));
                    }
                }
            }
        }
    }

    Dictionary<string, int> signs = new Dictionary<string, int>()
{
        {"start", 0},
        {"hello", 1},


};


    // Update is called once per frame
    void Update()
    {
        if (signs.ContainsKey(passingtext.gettext()))
        {
            avatarAnimator.SetInteger("stateNum", signs[passingtext.gettext()]);

        }
       else
       {
           // message for unstored signs
           if (!Application.isEditor) {
            VoicePlug.Call("showMessage", "sorry I can't understand you");
           }
            passingtext.settext(" ");
       }

    }
}

07-24 09:48
查看更多