我正在尝试在游戏引擎中创建一个名为 Unity 的非常简单的弹药脚本。
C#:
public int ammoCount = 30;
public string ammoText;
void magazine()
{
ammoText = "AMMO " + ammoCount + "/30";
if (Input.GetKey(KeyCode.Mouse0))
{
ammoCount = - 1;
}
if (Input.GetKey(KeyCode.R))
{
ammoCount = 30;
}
}
所以我想让你关注的是“ammoText =”AMMO“+ ammoCountString +”/ 30“;”。 我在google上搜索过,而且正如我所看到的那样,它应该是应有的。
在我的代码中,我编写了一些代码以使变量出现在屏幕上,但它只显示“AMMO”。
那里有任何答案吗?
先谢谢。
-Mads
编辑:似乎这不是我的剧本。对不起大家!但也许你知道它为什么不显示我的变量?在屏幕上显示变量的代码:GUI.Label(new Rect(10,10,100,20),(ammoText));
答案 0 :(得分:2)
你的脚本看起来有点尴尬 - 不完全确定如何调用它或如何将它输出到屏幕上。这是MonoBehaviour中的方法吗?
您可以通过编写Debug.WriteLine(“一些文本或变量”)将调试信息输出到Unity控制台,这将帮助您弄清楚发生了什么。
除了代码有点冗长之外,我认为你要做的事情没有问题,虽然我不确定为什么你想要一个-1或30的值,之间什么也没有。当您按下Mouse0时,您是否尝试从剪辑中删除1个弹药?如果是这样,请使用我在下面发布的代码。我还对代码进行了“改进”,为您提供更多控制。你的一些变量应该是私有的(虽然我不能100%确定你的情况是哪些)因为通过Unity编辑器访问它们没有任何好处。
虽然你的代码可以工作,但是当我在C#中连接时,我倾向于使用string.Concat()或string.Format(),因为它们使事情变得更整洁,并且它们的效率稍高(这是完全是另一个话题。
public int ammoInFullClip = 30;
private int currentAmmoCount = 30;
private string ammoText;
void magazine()
{
if (Input.GetKey(KeyCode.Mouse0))
{
currentAmmoCount-= 1;
}
if (Input.GetKey(KeyCode.R))
{
currentAmmoCount= ammoInFullClip;
}
ammoText = string.Format("AMMO {0}/{1}", currentAmmoCount, ammoInFullClip);
}
<强>更新强>
使用您的代码,这是 应该工作的完整示例,但我还没有测试过。
public class MyScript : MonoBehaviour {
public int ammoInFullClip = 30;
private int currentAmmoCount = 30;
private string ammoText;
private void UpdateMagazine() {
if (Input.GetKey(KeyCode.Mouse0)) {
currentAmmoCount -= 1;
}
if (Input.GetKey(KeyCode.R)) {
currentAmmoCount = ammoInFullClip;
}
ammoText = string.Format("AMMO {0}/{1}", currentAmmoCount, ammoInFullClip);
}
public void Update() {
UpdateMagazine();
}
void OnGUI() {
Debug.WriteLine(ammoText);
}
}
答案 1 :(得分:0)
要连接字符串和int,如果数字在字符串后面,则不需要使用ToString,只需使用:
ammoText = "AMMO " + ammoCount + "/30";
答案 2 :(得分:0)
您不需要将变量声明为public,只需声明如下
即可int ammoCount = 30; string ammoText;
您的连接可以正常运行。