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人!


  • 相关阅读:
    解释机器学习模型的一些方法(一)——数据可视化
    机器学习模型解释工具-Lime
    Hive SQL 语法学习与实践
    LeetCode 198. 打家劫舍(House Robber)LeetCode 213. 打家劫舍 II(House Robber II)
    LeetCode 148. 排序链表(Sort List)
    LeetCode 18. 四数之和(4Sum)
    LeetCode 12. 整数转罗马数字(Integer to Roman)
    LeetCode 31. 下一个排列(Next Permutation)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    论FPGA建模,与面向对象编程的相似性
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6917754.html
Copyright © 2011-2022 走看看