【发布时间】:2017-11-21 04:36:42
【问题描述】:
所以我基本上是 Unity 和 C# 的新手,并且一直在关注在线教程(N3K 2D Platformer、YouTube),我正在尝试创建一个基本的 UI 来显示分数等,我似乎遇到了一个空指针异常,我似乎无法弄清楚,因为我引用了导致此错误的两个对象,即我的 scoreText 对象和我的 hitPointText 对象。
正如我所说,我确实引用了这些对象,方法是将它们从我的层次结构中拖到我在检查器的关卡管理器脚本中创建的字段中,除此之外,我只是按照教程进行操作并完成了完全按照视频的指示,但在视频上它似乎工作正常。
有问题的代码行是:
scoreText.text = score.ToString();
hitPointText.text = hitPoints.ToString();
本教程已经 1 年多了,是否有可能因为统一更新而改变了需要引用的内容?
我将在下面发布我的关卡管理器代码,希望有人能够指出我似乎遗漏的错误。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LevelManager : MonoBehaviour
{
public static LevelManager Instance { set; get; }
public Transform spawnPosition;
public Transform playerTransform;
private int hitPoints = 3;
private int score = 0;
public Text scoreText;
public Text hitPointText;
private void Awake()
{
Instance = this;
scoreText.text = score.ToString();
hitPointText.text = hitPoints.ToString();
}
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
private void Update ()
{
if(playerTransform.position.y < (-10))
{
playerTransform.position = spawnPosition.position;
hitPoints--;
if(hitPoints <= 0)
{
Debug.Log("Your Dead!");
}
}
}
public void Win()
{
Debug.Log("Victory");
}
}
以下屏幕截图:
Game view of unity engine, with game running
所以这里是我的播放器类中的一个 sn-p 代码,它在 LevelManager 脚本上使用实例,以便它可以访问 win() 方法,如开关“WinPost”的最后一种情况所示,不确定这是否是您在提到单例时所指的,除此之外,我所拥有的任何脚本中都没有使用单例一词。
switch (hit.gameObject.tag)
{
case "Coin":
Destroy(hit.gameObject);
break;
case "JumpPad":
verticalVelocity = jumpForce * 2;
break;
case "Teleporter_1":
controller.enabled = false;
transform.position = hit.transform.GetChild(0).position;
controller.enabled = true;
Debug.Log("This works!");
break;
case "Teleporter_2":
controller.enabled = false;
transform.position = hit.transform.GetChild(0).position;
controller.enabled = true;
Debug.Log("This works!");
break;
case "WinPost":
LevelManager.Instance.Win();
break;
default:
break;
}
【问题讨论】:
-
我猜你忘了在 Unity 编辑器中分配
scoreText和/或hitPointText的变量(当你查看分配给这个脚本的游戏对象的属性时)跨度> -
另外,空 pointer 异常来自 Java,您面临的是空 reference 异常,
-
是的,对不起,我来自 java 背景,所以有点弗洛伊德式的失误
-
你是否在任何地方使用单例
Instance?