【发布时间】:2014-07-17 20:07:14
【问题描述】:
我遇到了一个 c# 代码,该代码在第一次实例中应该很容易解决,但我无法让它工作。我正在 Unity3D 中制作视频游戏,我想制作一个功能,一旦对象与墙壁发生碰撞,就会增加分数。
我有 2 个脚本:
- Puntuacion.cs // 增加和设置 MAX 和 ACTUAL 分值的所有函数
- Collisions.cs // 检测游戏何时发生碰撞的脚本
代码:
Puntuacion.cs
using UnityEngine;
using System.Collections;
public class Puntuacion : MonoBehaviour
{
public int puntuacionActual=0;
public int maximaPuntuacion = 14;
public Transform gamePointsTextActual; // Texto Marcador Actual
public Transform gamePointsTextMaxima; // Texto Marcador Maxima
void Start ()
{
gamePointsTextActual=GameObject.Find("Texto 3D - ScoreActual").transform;
gamePointsTextMaxima=GameObject.Find("Texto 3D - ScoreMaxima").transform;
}
void Update ()
{
gamePointsTextActual.GetComponent<TextMesh>().text=this.puntuacionActual.ToString("D3");
gamePointsTextMaxima.GetComponent<TextMesh>().text=this.maximaPuntuacion.ToString("D3");
if(puntuacionActual>maximaPuntuacion)
{
maximaPuntuacion = puntuacionActual;
gamePointsTextActual.GetComponent<TextMesh>().text=this.maximaPuntuacion.ToString("D3");
}
}
public void incrementarPuntuacion()
{
puntuacionActual = puntuacionActual+1;
Debug.Log("Puntuacion Actual :"+puntuacionActual);
if(puntuacionActual>maximaPuntuacion)
{
maximaPuntuacion = puntuacionActual;
}
}
}
Collisions.cs
using UnityEngine;
using System.Collections;
public class Collisions : MonoBehaviour
{
public Puntuacion puntuacion = new Puntuacion();
public void OnCollisionEnter(Collision obj_collision )
{
if(obj_collision.gameObject.name == "HitScore")
{
Debug.Log("Collision");
puntuacion.incrementarPuntuacion();
Destroy(gameObject,2.0F);
}
if(obj_collision.gameObject.name == "Plane")
{
Debug.Log("Collision Plano");
Destroy(gameObject,1.0F);
}
}
}
两个脚本都附加到同一个游戏对象,但我收到此错误:
NullReferenceException: Object reference not set to an instance of an object
Collisions.OnCollisionEnter (UnityEngine.Collision obj_collision
另一方面,代码不加分,一直加1,实际得分保持在1。 我想这是因为每次游戏发生碰撞时,我都会创建一个新的 Puntuacion.cs 实例,包括值 puntuacionActual=0 和 maximaPuntuacion = 14;并在每次碰撞中将该 puntuacionActual 的值从 0 增加到 1。
我想要实现的是在系统墙壁上发生碰撞时增加得分值(+1),就是这样。我想为下一次碰撞保存该值。
我将非常感谢任何帮助我解决这个问题的人
最好的问候
【问题讨论】: