我正在尝试使用C#代码从int
中的Unity
变量中获取数据。
以下是我用来获取C#
的{{1}}代码。
int
以下是我尝试从中提取数据的其他脚本中的代码。
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
意味着为10,它也始终为0。
我的问题是如何保持脚本的价值?任何帮助表示赞赏。
答案 0 :(得分:1)
试试这个
public static int score2
{
get
{
return GameObject.FindWithTag("Player").GetComponent<gameScript>().score;
}
}
答案 1 :(得分:1)
你有很多可能性。
第一个是将您的分数设置为游戏脚本的静态参数。
所以你可以在任何地方访问它:
`int myScore = gameScript.Score ;`
声明应该是:
`public static int score;`
如果你想从不同的脚本中保存很多不同的值,第二种可能性要好得多。 在这种情况下,您需要定义一个gameContext单例。
如果你不知道这是什么,你应该看看C#中的单身人士: [https://msdn.microsoft.com/en-us/library/ff650316.aspx]
Singleton将允许您拥有gameContext的单个实例。 在您的情况下,您的单身人士将具有分数属性。 并且您将能够从任何场景和任何脚本中获取值。
这是迄今为止最好的方法。
答案 2 :(得分:0)