Unity C#对象引用未设置为对象的实例

时间:2014-04-18 15:21:20

标签: c# unity3d

我一直在错误地将对象引用设置为第64行上的对象实例,而我无法弄清楚我需要做什么

一切都在运作,就像生命出现,计时器和分数一样,但如果你能告诉我什么是错的,那么分数就不会增加我会非常感激

这是我的代码:

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {

private CountdownTimer myTimer;

private int score = 0;
private int lives = 3;
private int DEATH_Y = -10;

public Texture2D LivesLeft1;
public Texture2D LivesLeft2;
public Texture2D LivesLeft3;

public int GetScore(){
    return score;
}

public int GetLives()
{
    return lives;
}

private void Start()
{
    myTimer = GetComponent<CountdownTimer>();
}

private void Update()
{
    float y = transform.position.y;

    if (y < DEATH_Y) {
        MoveToStartPosition();
        lives--;
    }

    if (score == 10)
    {
        Application.LoadLevel("Level2");
    }

    if (lives == 0)
    {
        Application.LoadLevel("GameOver");
    }

}

private void OnGUI()
{
    GUILayout.BeginHorizontal ();
    DisplayLives();

    int secondsLeft = myTimer.GetSecondsRemaining();//this is line 64
    string timeMessage = "Seconds left = " + secondsLeft;
    GUILayout.Label(timeMessage);

    string scoreMessage = "Score = " + score;
    GUILayout.Label (scoreMessage);
}

private void DisplayLives()
{
    int playerLives = GetLives();

    if (1 == playerLives) {
        GUILayout.Label(LivesLeft1);
    }

    if (2 == playerLives) 
    {
        GUILayout.Label(LivesLeft2);
    }

    if(3 == playerLives){
        GUILayout.Label(LivesLeft3);
    }
}

private void MoveToStartPosition()
{
    Vector3 startPosition = new Vector3(0,5,0);
    transform.position = startPosition;
}

/**
 * what increases the score
 * anything with the tag Hidden
*/
private void OnTriggerEnter(Collider c)
{
    string tag = c.tag;

    if("Hidden" == tag)
    {
        score++;
    }
}
}

1 个答案:

答案 0 :(得分:1)

你确定你的GameObject有一个名为CountdownTimer的组件吗? 另外,将Start函数更改为Awake,因为该行不依赖于其他任何内容。