美文网首页
深入了解方法(三)

深入了解方法(三)

作者: 这双鞋好贵 | 来源:发表于2015-03-30 20:38 被阅读53次

从方法中得到返回值

那么,现在是时候了解方法的一个强力特性了。这意味着向你前面学到的那样给方法传递参数,并从中获取返回值。之前你让AddTwoNumbers()所做的一切只是让两数相加然后输出在控制台中。

现在,为了代替直接显示出结果,你需要去改写AddTwoNumbers(),并从调用方法的地方获取其返回值。

记住,当我告诉你去调用一个方法的时候,他只是去执行代码块中代码的一个替代品。就像是你把方法中的所有代码都搬过来一样。

下面的截图仍然非常简单,但是它展现了替代品的工作方式和返回值是如何工作的。

动手时间——从AddTwoNumbers中获取返回值

修改LearningScript去调用AddTwoNumbers()两次,并获取一个结果。并且创建另一个方法去展示结果。

  1. 在Monodevelop中打开LearningScript并准备修改。
  2. 在第12行,声明一个变量来接收结果。
  3. 在第19-23行,重新定义AddTwoNumbers()并给他一个返回值。
  4. 在第25-28行,定义DisplayResult()方法。
  5. 保存文件
  6. 点击Play
LearningScript

发生了什么

就像你在下图中看到的一样,结果是14,然后你所需要学到的主要概念是:

  • 当一个方法具有返回值的时候,他会像变量一样具有一个数据类型。
  • 事实上,方法的返回值可以很容易的存储在变量中。
Console

做以下几步来分析代码:

  • 第10行的代码是这样的:
    void Start()
    Unity只会调用一次Start()方法。

  • 第12行到第14行的代码描述是这样的:(注意:我只是为了截图方便所以把本应是一行的代码变成了三行。)
    int answer = AddTwoNumbers(number1, number2) + AddTwoNumbers(number1, number3);
    这几行代码就是为了把这几个数相加然后放到一个叫“answer”的变量里。
    首先,他回去向19行方法AddTwoNumbers(number1, number2)发起调用。
    输入参数number1number2会以2和3的形式传入第19行的方法中。

  • 第19行的方法描述如下:
    int AddTwoNumbers(int firstNumber, int secondNumber);
    整型数2和3会被分配给变量firstNumbersecondNumber

  • 21行代码描述如下:
    int result = firstNumber + secondNumber;
    数字2和3会被相加并声明在变量内。

  • 22行代码描述如下:
    return result;
    保存在result内的整数5,会被返回到调用方法的12行。

  • 回到12行:
    当你再看到AddTwoNumbers(number1, number2),现在已经被5所代替了。
    现在,第12行会继续执行另一个调用AddTwoNumbers(number1, number3)
    唯一的不同就是传入参数变了。
    参数number1number3将数字2和7传入了第19行的方法里。

  • 让我们再回到19行:
    2和7被分配给了变量firstNumbersecondNumber

  • 第21行的代码描述:
    整数9,被返回到12行,调用方法的地方。

  • 让我们再一次回到12行:
    当你再看到AddTwoNumbers(number1, number3),现在已经被9所代替了。
    现在12行会继续执行。这里有一个加法符号,会将两个方法的返回值5和9相加在一起,所以现在变量answer内会保存一个值14。
    Start()方法会继续执行到16行。

  • 第16行代码如下:
    DisplayResult(answer);
    他会调用25行的DisplayResult()方法。
    他会接收一个参数。这个参数会使用存放着int类型数据的answer变量。
    参数answer传送整数14到25行的方法中。

  • 25行的代码:
    void DisplayResult(int total)
    整数14会被分配到变量total中。

  • 第27行代码如下:
    Debug.Log("The grand total is: " + total);
    这个输出到Console的数据带着从下一章内瞥到的一点东西。
    一些包括存放在变量值在内的文本数据会被显示出来。
    Unity的Console则会显示The grand total is: 14
    Start()方法已经执行完毕。至此LearningScript中已经没有代码可以执行了,代码就结束了。

Have a go hero——将两个以上的数字加在一起

尝试修改12行的代码,再添加一个方法调用,将number2number3加在一起。你将会获得额外的AddTwoNumbers()结果。Console内的输出会是The grand total is: 24

调用方法是一个逻辑的过程

就像你看到分析里的描述的那样,每次只会执行一步代码。然而,调用方法会让我们的执行顺序绕行。方法内的代码也会逐条执行直至结束。如果方法的返回类型是void,那么我们的执行顺序就又会回到我们调用方法的地方。如果方法具有一个返回值,那么这个值就会代替我们调用方法的地方,然后,代码会继续执行。

使用Unity中的Update和Start方法

每次当你创建Unity中的代码文件时,这两个框架代码就会生成,这当然是因为它们比较重要。这是最常使用的MonoBehaviour方法,看下面的截图。我喜欢叫他们Unity的魔术方法,因为如果你不去调用他们,Unity也会去调用他们。通常,需要保持至少一个MonoBehaviour方法来确保你的代码可以顺利执行。我说通常,因为你的方法可能只是会被别的代码文件里的方法调用。

我是怎么知道他们会被Unity调用并且是MonoBehaviour方法的呢?好的,代码参考是你的好伙伴

这只是Unity可调用的一部分方法。这只是代码参考中对MonoBehaviour的查询结果:

MonoBehaviour.png

请看LearningScript的第四行:

public class LearningScript : MonoBehaviour

这行说明了LearningScript继承自MonoBehaviour。任何继承自MonoBehaviour的代码都会自动执行``Start()和Update(),如果他们在你的代码里。所以,只要你愿意,你可以随时在你的类名后添加: MonoBehaviour来创建一个继承自MonoBehaviour的类。

请注意冒号

Start方法只会执行一次

Unity只会调用一次这个方法。当游戏对象固定在了你的场景中时,Start()就会被调用。这个方法主要被用在初始化,或加载你的成员变量。这些步骤都是为了使你的Update()方法可以随时执行做准备。

你可能注意到了我用的所有例子都使用了LearningScript中的Start()方法。这些例子并没有初始化任何代码,我只是利用了Start()只会执行一次的特性让它来输出结果,因为只输出一次比较直观。

Update方法会被不断地执行

就像你在Scripting Reference中看到的一样,你可能会注意到,大部分代码都存在与Update()中。当你的游戏运行的时候,这个场景可能会在一秒内变换多次。这就被叫做每秒帧数或者FPS。当每一帧被展示出来的时候,Update()方法就会被Unity所调用。

Update()被每一帧调用的时候,他们会允许你的游戏来监听输入,比方鼠标点击或是键盘敲击,每一帧。用户的输入是我们要在下一章讲得话题。

小测验——了解方法的运行

  1. 方法的最低要素是什么?
  2. 方法名里的括号是做什么用的?
  3. void在定义方法的时候意味着什么?
  4. 在Unity中,Update()是如何被调用的?

总结

在本章中,我们学到了方法的定义是大括号中的代码段,不是以分号结尾。圆括号也是方法中的一部分。我们也学到了如何调用一个方法,如何使用返回值,以及当继承了MonoBehaviour时Unity是如何自动调用Start()Update()方法的。

你现在学会了编写代码中两个重要的环节,变量和方法。从现在开始,你只需要学会或用它们。现在你已经了解了他们,是时候进入下一章来让你的代码做一下事了。

相关文章

  • 深入了解方法(三)

    从方法中得到返回值 那么,现在是时候了解方法的一个强力特性了。这意味着向你前面学到的那样给方法传递参数,并从中获取...

  • 深入了解方法(一)

    在前一章,你学习到了变量作用域——变量的存在和允许调用范围。这个作用域会被一对儿尖括号包裹住。这个尖括号的作用是将...

  • 深入了解方法(二)

    调用方法 在之前的截图中,观察12和22行,你注意到有什么不同了么?他们看起来不太一样对不对?这些变量的名字,蓝箭...

  • Runtime 学习资料汇总

    你真的了解 load 方法么? 从 NSObject 的初始化了解 isa 深入解析 ObjC 中方法的结构 从源...

  • ❓为什么做短期班和长期班有很大不同

    ❤除了学习方法本身之外,长期班更深入训练实践方法,并且,随着了解的深入,会给到更多的参考性建议! 下图,小升初, ...

  • 深入了解情绪的三种方法

    良好的情绪管理是成功人士的重要技能。而准确地给自己的情绪命名——心理学家称之为“情绪标记”是情绪管理的第一步。但这...

  • 2021-12-08 重读《短线交易秘诀》

    要想成为一名成功的交易者,必须对市场有深入的了解。而要想深入了解市场,只能不断学习、实践、复盘、反思。成功有方法,...

  • JAVA入门的进一步加深

    学习目的 深入了解Java语言里面的类、对象、数组的三种输出方式、属性、方法。 相关技术、及其使用 类和对象类:一...

  • 深入了解javascript的sort方法

    写于2015年6月18日,可能已过时,请谨慎参考。所有示例代码未经完整测试,仅示意思路。 在javascript中...

  • 深入了解JVM-方法区

    今天呢!灯塔君跟大家讲: 深入了解JVM-方法区 当JVM使用类装载器装载某个类时,它首先要定位对应的class文...

网友评论

      本文标题:深入了解方法(三)

      本文链接:https://www.haomeiwen.com/subject/dtonxttx.html