如何在函数间传递参数值?请求在Unity中复用maxvalue参数
嘿,让我来帮你搞定这两个问题!
问题1:如何在函数间传递参数值?
在Unity(或者说C#)里,函数间传递参数主要有几种常用方式,选哪种取决于你的场景:
- 用类的成员变量存储:把需要共享的值存在类的公共/私有字段里,其他函数直接访问这个变量。这是你当前场景最适配的方式。
- 方法返回值传递:如果某个函数执行后产出一个值,用
return把它返回给调用方,调用方拿到后再传给其他函数。 - 直接作为参数传递:调用另一个函数时,直接把值当作参数传进去,让目标函数直接使用。
问题2:在NextGuess中使用Levelchoose传入的maxvalue参数值
你的代码问题核心是参数名和成员变量名重名了,导致你在Levelchoose里没正确给成员变量赋值。看你原来的代码:
public int maxvalue; // 类的成员变量 public void Levelchoose(int maxvalue){ // 参数名和成员变量同名,这里的maxvalue指的是传入的参数,不是成员变量 //The parameter Application.LoadLevel ("Game"); }
在Levelchoose函数里,你操作的是局部参数,而不是类的成员变量,所以NextGuess里拿到的还是成员变量的初始值(默认是0)。这里给你两种解决方案:
方案1:修正成员变量赋值(推荐)
修改参数名避免冲突,然后把参数值赋值给成员变量,这样NextGuess就能直接用了:
public int maxvalue; // 类的成员变量,用来存储传递的值 public void Levelchoose(int newMaxValue){ // 修改参数名,避免和成员变量混淆 this.maxvalue = newMaxValue; // 把传入的参数值存到成员变量里 Application.LoadLevel ("Game"); } void NextGuess(){ guess= Random.Range(min , max + 1); text.text = "Is the number greater or lower than "+guess.ToString ()+" ?"; maxvalue = maxvalue - 1; // 现在这里用的就是Levelchoose传入的参数值啦 print (maxvalue); if (maxvalue<=0){ Application.LoadLevel("Win"); } }
如果实在不想改参数名,也可以用this.maxvalue = maxvalue;来明确指定访问类的成员变量,但改参数名会让代码更清晰,减少出错概率。
方案2:直接把参数传给NextGuess
如果不需要在多个函数间共享这个值,也可以在调用NextGuess时直接把参数传进去,不用依赖成员变量:
public void Levelchoose(int maxvalue){ NextGuess(maxvalue); // 调用NextGuess时直接传递参数 Application.LoadLevel ("Game"); } void NextGuess(int currentMaxValue){ // 让NextGuess接收参数 guess= Random.Range(min , max + 1); text.text = "Is the number greater or lower than "+guess.ToString ()+" ?"; currentMaxValue = currentMaxValue - 1; print (currentMaxValue); if (currentMaxValue<=0){ Application.LoadLevel("Win"); } }
记得确保你调用Levelchoose的时候传入了正确的数值,比如Levelchoose(10);这样,值才能正确传递哦!
内容的提问来源于stack exchange,提问作者Natsu Dragneel
相关产品推荐
相关产品推荐

