[英]Unity C# Null Reference Exception
我正在尝试使用 C# 代码从Unity
的int
变量获取数据。 下面是我用来获取int
的C#
代码。
using UnityEngine;
using System.Collections;
public class endGameMessage : MonoBehaviour {
public static int score2;
void Start () {
GameObject thePlayer = GameObject.FindWithTag("Player");
gameScript game = thePlayer.GetComponent<gameScript>();
score2 = game.score;
}
// Update is called once per frame
void Update () {
Debug.Log (score2);
}
}
下面是我试图从中提取数据的另一个脚本中的代码。
using UnityEngine;
using System.Collections;
public class gameScript : MonoBehaviour {
//score
public int score = 0;
void OnTriggerEnter(Collider other) {
if(other.gameObject.tag =="hammer"){
GameObject.FindGameObjectWithTag("pickUpMessage").guiText.text = ("Picked Up A Hammer");
Destroy(other.gameObject);
Debug.Log("collision detected hammer");
audio.PlayOneShot(gotHit);
score = score+10;
}
}
}
我可以让int
值遇到另一个脚本,但它始终为 0,即使int
是 10。
我的问题是如何在脚本中保持值? 任何帮助表示赞赏。
试试这个
public static int score2
{
get
{
return GameObject.FindWithTag("Player").GetComponent<gameScript>().score;
}
}
你有很多可能性。
第一个是将您的 Score 设置为 gameScript 的静态参数。
所以你可以像这样在任何地方访问它:
int myScore = gameScript.Score ;
声明应该是:
public static int score;
如果您想从不同的脚本中保存许多不同的值,第二种可能性要好得多。 在这种情况下,您需要定义一个 gameContext 单例。
如果你不知道这是什么,你应该看看 C# 中的单例:[ https://msdn.microsoft.com/en-us/library/ff650316.aspx]
Singleton 将允许您拥有游戏上下文的单个实例。 在您的情况下,您的单身人士将有一个 Score 属性。 您将能够从任何场景和任何脚本中获得价值。
这是目前最好的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.