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

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

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

Unity游戏对象的属性

在Unity中,游戏场景中游戏对象的属性,可以在Inspector视图里查看,想看哪个游戏对象的属性,就使用鼠标选中哪个游戏对象即可。例如,要查看游戏场景中Main Camera对象的属性,只需在Hierarchy视图里选中Main Camera,然后Inspector视图就会显示出它的所有属性,如图3-1所示。

 

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

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

(1在Project视图里,单击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自动添加的代码,对于没有实际意义的代码,读者可以将其删除。

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

 

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

Unity中指代数据的名称

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

 

图3-3  脚本中的变量名

Unity变量命名规则

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

  • q  同一字母的大小写,对于变量名是不同的。例如,iValue和IValue是不同的变量名;
  • q  不能以数字开头。例如,iValue和_Value是合法的,但是1Value是不合法的;

Unity变量命名约定

“规则”是必须遵守的,有强制性,不遵守的话就会出现语法上的错误。而“约定”则是要看意愿的,读者可以不遵守约定,也不会犯任何语法上的错误。虽然它没有强制性,但是读者也最好了解一下,因为遵守约定,利于代码的阅读,以及游戏编程人员协同工作。

1.选择有意义的名称

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

  • public bool theBearMakesBigPottyInTheWoods = true;

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

  • public bool potty = true;

这个名字确实简洁多了!毕竟缺少了好多描述性的信息。也许读者在为变量命名的时候,还记得它的作用,但是过几周之后就不一定了。到时候,读者将不得不阅读更多的代码,来推测这个变量名的作用。

2.小写字母开头

使用小写字母作为变量名的首字母,是为了让变量名与类名区别开来,从而使得代码阅读者可以轻松地从名称上,得知名称是变量名还是类名。因为类名通常是使用大些字母开头的,因此最好让变量名以小写字母开头。例如:

  • Transform;                                             //类名
  • transform;                                                        //变量名

如果严格的遵守了命名的约定的话,就可以很容易的得知,第一个是类名,第二个是变量名。

提示:在本书后面的章节,读者会看到类的命名约定,那个时候作者会告诉你类名最好以大写字母开头。读者也可以使用其它的命名约定,但是无论使用何种命名约定,目的都是一致的,就是为了提高代码的可读性,便于多名游戏编程人员的协作。

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修饰的属性不见了

注意:脚本中可以省略对变量的修饰,也就是说不书写public和private也不会有语法上的错误。此时,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  int、float、double类型的数据都是数值,因此在未指定iValue、fValue和dValue所指代数据的具体值时,Unity会自动为属性赋值0;
  • q  string类型的数据是字符,因此在未指定strValue所指代数据的具体值时,Unity会自动为属性赋值“空字符”;
  • q  bool类型的值只可能是true或者false,因此Unity使用了一个复选框表示bValue所指代的数据,且默认设置其为false,当复选框被复选时,表示值为true;

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

C#开发Unity游戏教程之游戏对象的属性变量的更多相关文章

  1. C#开发Unity游戏教程之游戏对象的行为逻辑方法

    C#开发Unity游戏教程之游戏对象的行为逻辑方法 游戏对象的行为逻辑——方法 方法(method),读者在第1章新建脚本时就见过了,而且在第2章对脚本做整体上的介绍时也介绍过,那么上一章呢,尽管主要 ...

  2. C#游戏开发高速新手教程Unity5.5教程

    C#游戏开发高速新手教程Unity5.5教程 试读文档下载地址:http://pan.baidu.com/s/1slwBHoD C#是微软公布的高级程序设计语言.这门语言和C语言一样,已经成为了大学计 ...

  3. 3ds Max光照纹理导入Unity的教程.

    原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0531/1581.html 相信这个3ds Max光照纹理导入Unity的教程对游戏设计师 ...

  4. webstorm-前端javascript开发神器中文教程和技巧分享(转)

    webstorm是一款前端javascript开发编辑的神器,此文介绍webstorm的中文教程和技巧分享. webstorm8.0.3中文汉化版下载: 百度网盘下载:http://pan.baidu ...

  5. C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例

    C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例 Unity中循环遍历每个数据,并做出判断 很多时候,游戏在玩家做出判断以后,游戏程序会遍历玩家身上大量的所需数据,然后做出判断,即首先判 ...

  6. C#开发Unity游戏教程之判断语句

    C#开发Unity游戏教程之判断语句 游戏执行路径的选择——判断 玩家在游戏时,无时无刻不在通过判断做出选择.例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏 ...

  7. C#开发Unity游戏教程之使用脚本变量

    C#开发Unity游戏教程之使用脚本变量 使用脚本变量 本章前面说了那么多关于变量的知识,那么在脚本中要如何编写关于变量的代码,有规章可循吗?答案是有的.本节会依次讲解变量的声明.初始化.赋值和运算. ...

  8. Unity 2D游戏开发教程之游戏精灵的开火状态

    Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 “开火”就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌 ...

  9. Unity 2D游戏开发教程之游戏中精灵的跳跃状态

    Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...

随机推荐

  1. ElasticStack系列之十九 & bulk时 index 和 create 的区别

    区别: 两篇文章 id 都一样的情况下,index 是将第二篇文章覆盖第一篇:create 是在第二篇插入的时候抛出一个已经存在的异常 解释: 在批量请求的时候最好使用 create 方式进行导入.假 ...

  2. Hadoop生态圈-Kafka的新API实现生产者-消费者

         Hadoop生态圈-Kafka的新API实现生产者-消费者 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  3. SQL记录-PLSQL条件控制

    PL/SQL条件控制   决策结构需要程序员指定一个或多个条件要计算,或由程序进行测试,如果条件被确定为真那么一条或多条语句被执行,如果要被执行的其它语句条件被确定为假,则选其它执行块. 以下是从在大 ...

  4. JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系

    一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...

  5. 关于aspx.designer.cs

    .aspx文件..aspx.cs文件和.aspx.designer.cs的一些说明 .aspx文件:(页面)书写页面代码.存储的是页面design代码.只是放各个控件的代码,处理代码一般放在.cs文件 ...

  6. JQuery 对表格的详细操作

    <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding=& ...

  7. header()跳转

    if ($toNews == 1) { header('Location:/ucenter/pageMailBox/2'); exit; } PHP跳转页面,用 header() 函数 定义和用法 h ...

  8. CSS3 响应式布局: @media (min/max-width:***) @font-face

    响应式布局 responsive design @media 属性 bootstrap  css 分析: @media (min-width:768px){ body{***} } use @medi ...

  9. 爬虫笔记之w3cschool注册页面滑块验证码破解(巨简单滑块位置识别,非鼠标模拟轨迹)

    一.背景介绍 最开始接触验证码破解的时候就是破解的w3cschool的使用手机号找回密码页面的验证码,详见:验证码识别之w3cschool字符图片验证码(easy级别),这次破解一下他们注册页面的滑块 ...

  10. 【ARTS】01_07_左耳听风-20181224~1230

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...