Ошибка NullReferenceException
Добавлено:
22 авг 2018, 17:37
ToxWill
Есть два скрипта HUD и HealthAndDamage. HUD лежит на канвасе второй на игровом объекте игрока.
При запуске выдает это - NullReferenceException: Object reference not set to an instance of an object
HealthAndDamage.OnHealthChanged (Int32 newHealth) (at Assets/Scripts/Networking/HealthAndDamage.cs:80)
вот та самая строчка на которую он ругает - HealthAndDamage
Используется csharp
void OnHealthChanged(int newHealth)
{
health = newHealth;
if (health < 100)
{
StartCoroutine(ShowHitEffect());
}
if (isLocalPlayer)
{
HUD.instance.DisplayHealth(health);
}
}
А это уже HUD -
Используется csharp
{
public static HUD instance;
Text healthText;
Text scoreText;
void Awake()
{
if (instance == null)
{
instance = this;
healthText = transform.Find("HealthText").GetComponent<Text>();
scoreText = transform.Find("ScoreText").GetComponent<Text>();
GetComponentInChildren<Camera>().gameObject.SetActive(false);
}
else
{
DestroyImmediate(gameObject);
return;
}
}
public void DisplayHealth(int health)
{
healthText.text = string.Format("Health: {0}", health);
}
public void DisplayScore(int score)
{
scoreText.text = string.Format("Score: {0}", score);
}
}
Re: Ошибка NullReferenceException
Добавлено:
22 авг 2018, 17:50
1max1
вот та самая строчка на которую он ругает - HealthAndDamage
Это не строчка, а целый блок кода, и черт знает, что он там ругает, выложи сюда полный стек трейс ошибок.
п.с. тут либо healthText == null либо сам instance == null
Re: Ошибка NullReferenceException
Добавлено:
22 авг 2018, 17:51
ToxWill
NullReferenceException: Object reference not set to an instance of an object
HealthAndDamage.OnHealthChanged (Int32 newHealth) (at Assets/Scripts/Networking/HealthAndDamage.cs:80)
HealthAndDamage.set_Networkhealth (Int32 value)
HealthAndDamage.CmdSetHealth (Int32 newHealth) (at Assets/Scripts/Networking/HealthAndDamage.cs:22)
HealthAndDamage.CallCmdSetHealth (Int32 newHealth)
HealthAndDamage.OnStartLocalPlayer () (at Assets/Scripts/Networking/HealthAndDamage.cs:15)
UnityEngine.Networking.NetworkIdentity.SetLocalPlayer (Int16 localPlayerControllerId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkIdentity.cs:777)
UnityEngine.Networking.NetworkServer.SetupLocalPlayerForConnection (UnityEngine.Networking.NetworkConnection conn, UnityEngine.Networking.NetworkIdentity uv, UnityEngine.Networking.PlayerController newPlayerController) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkServer.cs:1004)
UnityEngine.Networking.NetworkServer.InternalAddPlayerForConnection (UnityEngine.Networking.NetworkConnection conn, UnityEngine.GameObject playerGameObject, Int16 playerControllerId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkServer.cs:943)
UnityEngine.Networking.NetworkServer.AddPlayerForConnection (UnityEngine.Networking.NetworkConnection conn, UnityEngine.GameObject player, Int16 playerControllerId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkServer.cs:906)
UnityEngine.Networking.NetworkManager.OnServerAddPlayerInternal (UnityEngine.Networking.NetworkConnection conn, Int16 playerControllerId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkManager.cs:1062)
UnityEngine.Networking.NetworkManager.OnServerAddPlayer (UnityEngine.Networking.NetworkConnection conn, Int16 playerControllerId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkManager.cs:1028)
UnityEngine.Networking.NetworkManager.OnServerAddPlayerMessageInternal (UnityEngine.Networking.NetworkMessage netMsg) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkManager.cs:878)
UnityEngine.Networking.NetworkConnection.InvokeHandler (Int16 msgType, UnityEngine.Networking.NetworkReader reader, Int32 channelId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkConnection.cs:219)
UnityEngine.Networking.NetworkServer.InvokeHandlerOnServer (UnityEngine.Networking.ULocalConnectionToServer conn, Int16 msgType, UnityEngine.Networking.MessageBase msg, Int32 channelId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkServer.cs:1651)
UnityEngine.Networking.ULocalConnectionToServer.Send (Int16 msgType, UnityEngine.Networking.MessageBase msg) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/LocalConnections.cs:83)
UnityEngine.Networking.ClientScene.AddPlayer (UnityEngine.Networking.NetworkConnection readyConn, Int16 playerControllerId, UnityEngine.Networking.MessageBase extraMessage) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/ClientScene.cs:207)
UnityEngine.Networking.ClientScene.AddPlayer (UnityEngine.Networking.NetworkConnection readyConn, Int16 playerControllerId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/ClientScene.cs:140)
UnityEngine.Networking.ClientScene.AddPlayer (Int16 playerControllerId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/ClientScene.cs:134)
UnityEngine.Networking.NetworkManager.OnClientSceneChanged (UnityEngine.Networking.NetworkConnection conn) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkManager.cs:1172)
UnityEngine.Networking.NetworkManager.FinishLoadScene () (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkManager.cs:725)
UnityEngine.Networking.NetworkManager.UpdateScene () (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkManager.cs:765)
UnityEngine.Networking.NetworkIdentity.UNetStaticUpdate () (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkIdentity.cs:1089)
Re: Ошибка NullReferenceException
Добавлено:
22 авг 2018, 18:02
1max1
посмотри дебагом не равняется ли нулю твой инстанс
Используется csharp
void OnHealthChanged(int newHealth)
{
health = newHealth;
if (health < 100)
{
StartCoroutine(ShowHitEffect());
}
if (isLocalPlayer)
{
Debug.Log(HUD.instance == null);
HUD.instance.DisplayHealth(health);
}
}
Re: Ошибка NullReferenceException
Добавлено:
22 авг 2018, 18:10
ToxWill
True
UnityEngine.Debug:Log(Object)
HealthAndDamage:OnHealthChanged(Int32) (at Assets/Scripts/Networking/HealthAndDamage.cs:80)
HealthAndDamage:set_Networkhealth(Int32)
HealthAndDamage:CmdSetHealth(Int32) (at Assets/Scripts/Networking/HealthAndDamage.cs:22)
HealthAndDamage:CallCmdSetHealth(Int32)
HealthAndDamage:OnStartLocalPlayer() (at Assets/Scripts/Networking/HealthAndDamage.cs:15)
UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate()
Re: Ошибка NullReferenceException
Добавлено:
22 авг 2018, 18:29
1max1
True
Ну вот и ответ на твой вопрос, меняй порядок вызова скриптов, еще можешь попробовать запихнуть строку instance = this; в конструктор класса.
Re: Ошибка NullReferenceException
Добавлено:
22 авг 2018, 20:14
Anonymyx
запихнуть строку instance = this; в конструктор класса.
Использовать конструкторы MonoBeh'а крайне не рекомендуется. В Unity3D у MonoBeh'а он вызывается по нескольку раз, даже в редакторе, не в рантайме.
...
В Awake() запихиваешь все что НЕ связано с другими объектами, т.е. инициализация переменных данного класса без обращения к другим объектам.
В Start() запихиваешь все что связывается, обращается к другими классам, GetComponent'ы, и прочее.