zoukankan      html  css  js  c++  java
  • C#开发Unity游戏教程之游戏对象的属性变量

    C#开发Unity游戏教程之游戏对象的属性变量

    Unity游戏对象的属性——变量

    通过对上一章的学习,读者应该了解到了,游戏对象上的属性与脚本中的变量。建立联系的方式就是将脚本赋予游戏对象。上一章仅仅是简单的介绍了脚本中的变量,读者一定只是瘾。如今好了,作者将使用一整章的篇幅介绍变量与属性。

    Unity游戏对象的属性

    Unity中,游戏场景中游戏对象的属性,能够在Inspector视图里查看。想看哪个游戏对象的属性。就使用鼠标选中哪个游戏对象就可以。

    比如,要查看游戏场景中Main Camera对象的属性,仅仅需在Hierarchy视图里选中Main Camera。然后Inspector视图就会显示出它的全部属性,如图3-1所看到的。


    3-1  Inspector视图里查看Main Camera对象的属性

    通过上一章节的学习,读者应该了解到,属性是显示在组件之下的。组件的本质是类,而属性的本质就是变量,仅仅只是使用者是无法查看Unity这些内置组件类的代码的。因此。以下以自己编写的脚本来说明组件之于脚本中定义的类。属性之于脚本中的变量,它们之间的相应关系。

    1Project视图里。单击Create|C# Script命令。创建脚本并命名为MyScript,使用鼠标双击打开脚本。并在脚本中加入以下代码:

    • 01     using UnityEngine;

    • 02     using System.Collections;

    • 03    

    • 04     public class MyScript : MonoBehaviour

    • 05     {

    • 06              public int iValue;

    • 07              public string strValue;

    • 08              public float fValue;

    • 09     }

    提示:新创建的脚本,里面有非常多Unity自己主动加入的代码。对于没有实际意义的代码,读者能够将其删除。

    2MyScript脚本拖动到Main Camera对象上,再次使用Inspector视图查看Main Camera对象的属性,如图3-2所看到的,会发现脚本也变成了组件,成为了Main Camera对象的一部分。而且这个组件下显示的属性,就是脚本中的变量。


    3-2  脚本之于组件,变量之于属性

    Unity中指代数据的名称

    既然游戏对象属性的本质就是变量,那么脚本中的变量又是什么?在上一章曾向读者说明过,变量实际上就是一个存储数据的单元,而读者在脚本中所示“变量”,准确的说应该是“变量名”。“变量名”顾名思义就是指变量的名称,它的作用是指代变量,或者说是指代变量中的数据。

    就上一节的演示样例而言,脚本中的变量名是iValuestrValuefValue。如图3-3所示。


    3-3  脚本中的变量名

    Unity变量命名规则

    脚本中的变量名,看起来就是一串字母,但它是有自己的命名规则的,这个规则是被C#语法所规定的。即:变量名仅仅能由字母、数字和下划线组成。且仅仅能以字母或者下划线开头。对这个规则的解释例如以下:

    • q  同一字母的大写和小写。对于变量名是不同的。比如,iValueIValue是不同的变量名;

    • q  不能以数字开头。比如,iValue_Value是合法的,可是1Value是不合法的。

    Unity变量命名约定

    “规则”是必须遵守的,有强制性,不遵守的话就会出现语法上的错误。

    而“约定”则是要看意愿的。读者能够不遵守约定,也不会犯不论什么语法上的错误。尽管它没有强制性,可是读者也最好了解一下,由于遵守约定,利于代码的阅读,以及游戏编程人员协同工作。

    1.选择有意义的名称

    最好为变量选择有意义的名称,否则读者会在非常长一段时间以后。忘记当初为什么要命这样一个变量名。以及这个变量名想要指代一个什么样的数据。

    以下以一个样例来说明:

    • public bool theBearMakesBigPottyInTheWoods = true;

    这个变量名可真长!

    但它确实清楚的描写叙述了自己,因此即时读者在10年后看到这个变量,仍然能从它的名字上了解到当初什么要命这样一个变量名,以及这个变量名想要指代一个什么样的数据。如今给这个变量换还有一个简单点的名字:

    • public bool potty = true;

    这个名字确实简洁多了!毕竟缺少了好多描写叙述性的信息。或许读者在为变量命名的时候,还记得它的作用。可是过几周之后就不一定了。

    到时候,读者将不得不阅读很多其它的代码,来猜測这个变量名的作用。

    2.小写字母开头

    使用小写字母作为变量名的首字母,是为了让变量名与类名差别开来,从而使得代码阅读者能够轻松地从名称上,得知名称是变量名还是类名。由于类名一般是使用大些字母开头的,因此最好让变量名以小写字母开头。

    比如:

    • Transform;                                             //类名

    • transform;                                                        //变量名

    假设严格的遵守了命名的约定的话。就能够非常easy的得知,第一个是类名,第二个是变量名。

    提示:在本书后面的章节,读者会看到类的命名约定,那个时候作者会告诉你类名最好以大写字母开头。

    读者也能够使用其他的命名约定,可是不管使用何种命名约定,目的都是一致的。就是为了提高代码的可读性。便于多名游戏编程人员的协作。

    Unity变量名与属性名的些许不同

    通过本章第一节的学习,读者已经了解到,游戏对象上属性的本质就是变量,而属性名与变量名也是一致的。

    可是细心的读者可能发现了,属性名与变量名并不是全然一致,至少首字母的大写和小写就不同。如图3-4所看到的。


    3-4  变量名与属性名不全然一致

    事实上相同的问题,也发生在了脚本名(类名)与组件名的不一致上。

    比如,MyScript(脚本名、类名)的组件名是My Script。这也许是微不足道的,但它却体现出了Unity的体贴、周到,读者难道不认为,Unity所做的这些变动,使得变量名在变成了属性名以后。更加的易读了吗?事实就是如此。

    Unity属性名的可见性

    读者千万不要觉得,仅仅要脚本中有变量,就会在脚本成为组件以后,出如今组件下的属性列表中。这样的想法是错误的,由于决定变量是否会出如今组件下。成为属性的因素是,修饰变量的是public,还是private

    本章前面部分演示的演示样例,变量前面都有public修饰,所以才会显示在组件下的属性中,如图3-5所看到的。


    3-5  变量前的修饰部分——public

    假设将strValue前的修饰public,换成private。在保存对脚本代码的改动以后,再次查看组件下的属性,就会发现名为Str Value的属性不见了。如图3-6所看到的。


    3-6  private修饰的属性不见了

    注意:脚本中能够省略对变量的修饰,也就是说不书写publicprivate也不会有语法上的错误。此时,Unity会默认变量是被private修饰的,因此此变量相同不会以属性的形式显示在组件下。如图3-7所看到的。


    3-7  省略了修饰的变量

    C#语法规定,被public修饰的变量,能够被外界訪问和改动,也就是说变量存储的数据,同意在脚本外被改动。因此开发人员才干够在Unity中,通过属性改动脚本中变量存储的数据。

    private修饰的变量与public刚好相反,拒绝被外界訪问和改动。

    因此变量中的数据无法被外界改动,Unity也就不会将此类变量作为属性显示在Inspector视图中。这么看来。这是一个非常明智的决策!

    Unity设定属性的数据类型

    属性就是变量,它们二者仅仅是同一事物在不同场景下的不同称呼而已。在Unity中,应该说属性有不同的数据类型,可是假设在脚本中,就仅仅能说变量有不同的数据类型了。

    数据类型是什么?读者实际上已经在脚本中见过的,如图3-8所看到的。


    3-8  脚本中的3种数据类型

    Unity中的数据类型

    计算机能够存储各种各样的数据,而计算机对于不同类型的数据的存储和处理方式是不同的。

    因此。为了让计算机更好的处理指定的数据。最好为数据指定类型。

    C#中的数据类型能够分为图3-9所看到的的几大类。


    3-9  数据类型的分类

    Unity中经常使用的数据类型是简单值类型,如表3.1所看到的。

    3.1  简单值类型


    为变量或者说属性设置类型的根据是,看看数据处于哪一个范围。比如,262仅仅能使用long类型存储。可是对于50,能够使用全部的整型类型存储。这时就要看哪个类型最合适了。

    Unity属性数据类型的体现形式

    对于属性而言,不同数据类型的属性能够存储的数据种类不同,因此它在Inspector里的数据输入形式就会不同,如图3-10所看到的。


    3-10  Inspector视图里。不同种类的属性

    • q  intfloatdouble类型的数据都是数值,因此在未指定iValuefValuedValue所指代数据的详细值时,Unity会自己主动为属性赋值0

    • q  string类型的数据是字符,因此在未指定strValue所指代数据的详细值时,Unity会自己主动为属性赋值“空字符”;

    • q  bool类型的值仅仅可能是true或者false,因此Unity使用了一个复选框表示bValue所指代的数据。且默认设置其为false,当复选框被复选时,表示值为true

    本文选自:C#游戏开发高速入门大学霸内部资料,转载请注明出处,尊重技术尊重IT人!


  • 相关阅读:
    基于s5pv210的uboot总结
    QQ群笔记
    设计模式----适配器模式
    设计模式----桥接模式
    设计模式----建造者模式
    设计模式----原型模式
    设计模式----单例模式
    设计模式----工厂方法模式
    设计模式----设计原则
    JUnit单元测试--小试牛刀
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7279411.html
Copyright © 2011-2022 走看看