我从朋友那里收到一个统一项目,以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(" ");
}
}
}