C#开发Unity游戏教程之Scene视图与脚本的使用

Unity中Scene视图的快捷操作

Scene视图是开发者开发游戏时,操作最频繁的视图。因为一旦一个游戏对象被添加到游戏的场景中,就需要首先使用鼠标为这个游戏对象设置出合适的状态。而且开发者还需要多角度的观察游戏场景中的各游戏对象。基于以上的原因,Unity提供了很多快捷操作,支持开发者对Scene视图所做的各种操作,常见的操作方式有:

  • 直接按下键盘上的Q、W、E、R键,即可选中Unity左上角,工具栏上的4个按钮,且按钮与按键一一对应,省去了开发者使用鼠标点击的麻烦。
  • 使用鼠标的滚轮,可以控制Scene视图“窗口”与各游戏对象的远近,如图2-14所示,且向上滚动靠近,向下滚动远离。

 

图2-14  使用鼠标的滚轮,控制Scene视图与场景中各游戏对象距离的远近

  • 使用鼠标双击Hierarchy视图上的游戏对象名,场景视图会移动,直到对应的对象处于场景视图的中间,如图2-15所示。当开发者在场景中找不到对应的游戏对象时,可以使用这种方法快速找到。

 

图2-15  鼠标双击对象名,场景视图速度定位到对应对象,且被显示在场景视图的中央

  • 在场景视图里,按下鼠标中间的按钮(或滚轮),鼠标变成了 ,然后移动鼠标,可以任意移动场景
  • 如图2-16所示
  • 。其
  • 作用等同于工具栏上的第一个按钮。
  • 在场景视图里,按下键盘上的Alt键,鼠标就会变成 ,再按下鼠标的左键拖动,可围绕指定的游戏对象移动。如图2-17所示。

 

图2-16  任意移动场景视图中的场景              图2-17  绕着场景视图中的对象移动

  • 在场景视图里,按下鼠标的右键,鼠标就会变成眼睛的样子,然后再按下键盘上的“W、S、A、D”键,就可以模拟第一人称在场景中向前、后、左、右移动,移动鼠标相当于转动人物的头部。如图2-18所示。

图1-18  模拟第一人称,在场景中移动  图2-19  场景视图中的Gizmo工具 

  • 读者一定注意到,在Scene视图的右上角有个坐标轴的模型,在Unity中它被称为Gizmo,如图2-19所示。使用它可以将Scene视图,迅速切换到预定义的观察视角,具体的操作是单击Gizmo的轴。如图2-20,切换了三个视角来查看Scene视图中的游戏对象。

 

图2-20  使用不同的视角查看视图中的游戏对象

Unity中使用脚本

使用本章前面介绍的方法,读者可以让游戏场景中的游戏对象改变位置,或者旋转等等。但是,光是使用手动的方式,调节各游戏的状态,看起来不像是游戏的风格。毕竟玩家只想控制一个游戏对象,至于其它的游戏对象,那是电脑需要考虑的事情!没错,为了让游戏对象自己动起来,就只好使用脚本了。本节就先带领读者看看脚本,及其作用效果,而读者无需在意代码的实现细节,这会在后面的章节里讲解。

Unity中示例效果展示

下面是一个示例,它会让场景中的立方体边旋转边移动,而且在开始移动前还会改变自己的大小!是不是很神奇?下面是让立方体旋转、移动的脚本的全部代码:

  • 01     using UnityEngine;
  • 02     using System.Collections;
  • 03
  • 04     public class MyTransform : MonoBehaviour
  • 05     {
  • 06              public float scaleValue = 1.5f;
  • 07              public float xPosition = 0.1f;
  • 08              public int yRotation = 10;
  • 09              // Use this for initialization
  • 10              void Start ()
  • 11              {
  • 12                       transform.localScale = new Vector3(1,scaleValue,1);
  • 13              }
  • 14              // Update is called once per frame
  • 15              void Update ()
  • 16              {
  • 17                       transform.Translate ( new Vector3(xPosition,0,0),Space.World);
  • 18                       transform.Rotate (Vector3.up * yRotation,Space.World);
  • 19              }
  • 20     }

这个脚本让立方体产生的运动效果如图2-21所示。

 

图2-21  在Game视图里查看,立方体先改变大小,然后一边移动一边旋转的立方体

读者一定在奇怪,为什么脚本可以改变立方体的状态?实际上,它改变立方体状态的方法与我们改变立方体状态的方法是一样的,没错!它也是通过修改立方体上Transform组件的属性,进而达到目的的!

Unity中脚本的构成

所有脚本中的代码,实际上定义的是一个与脚本同名的类(class)。而类里又定义了变量(variable)和方法(methord),如图2-22所示。

 

图2-22  脚本的各组成部分

提示:脚本代码中,以双斜杠开始的代码行是注释。是为了说明代码的作用而添加的,对脚本本身不产生任何影响。

1.类

读者在前面已经见识过游戏对象的组件了,那个时候作者告诉读者,那是一类属性的总称。其实,组件的本质就是类!组件与类只是不同环境下,对同一东西的不同的称呼而已。称呼的转换过程是这样的:类定义在脚本中,脚本可以添加到游戏对象上,最后以组件的形式成为了游戏对象的一部分,如图2-23所示。

 

图2-23  类、脚本、组件

2.变量

脚本中的变量,是用来存储数据的,读者可以把它看作是容器。其实,组件下的属性本质上也是变量,同样是同一事物在不同场景下的不同称呼而已,如图2-24所示。展开成为组件的脚本,就可以看到其下的属性名与变量名基本一致,因为字母的大小写可能有所不同。

 图2-24  变量、属性

变量中存储的数据,成为了组件属性默认设置的值。

3.方法

脚本中的方法,用于完成特定的操作或者任务,例如,本节的示例中,让立方体变大、移动和旋转,就是脚本中由方法完成的任务,如图2-25所示。

 

图2-25  方法的作用

Unity中将脚本赋予游戏对象的方法

在Unity中,将脚本赋予游戏对象的方法有多种,本小节介绍两种最常见的方法,如图2-26所示。

  • q  使用鼠标,直接将脚本从Project视图拖动到,Hierarchy视图里指定的游戏对象上;
  • q  先选中Hierarchy视图里指定的游戏对象,Inspector视图会显示此游戏对象的所有组件,使用鼠标,将脚本从Project视图拖动到Inspector视图即可;

最后通过查看Inspector视图里,是否出现了与脚本同名的组件,就可以验证脚本是否被成功的赋予了游戏对象。

对于本章的游戏示例,脚本MyTransform被赋予了Cube对象(名为MyCube)。而在游戏运行的过程中,Cube对象会发生状态的改变,则是因为脚本代码修改了Cube对象上Transform组件的属性,进而实现了改变游戏对象状态的效果。

 

图2-26  将脚本赋予游戏对象的两种方法

Unity中运行游戏

Unity上方中间的部分,在工具栏的位置处有3个按钮,如图2-27所示,作用依次是运行游戏、中止游戏和单步运行游戏。读者可以单击对应的按钮,来决定运行游戏的方式。

 

图2-27  控制游戏运行的3个工具栏按钮

小结

本章的内容可以分为三大部分。第一部分是构建游戏场景,读者可以从中了解到游戏场景的操作,以及添加游戏对象的方法;第二部分是改变游戏对象的状态,即游戏对象的位置、朝向和大小,借此了解了Transform组件;第三部分是使用脚本,脚本免去了读者手动改变游戏对象状态的麻烦,也使得项目有了游戏的样子,借此了解了脚本的的各组成部分,即类、变量和方法,以及脚本各组成部分与游戏对象的关系。

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

C#开发Unity游戏教程之Scene视图与脚本的使用的更多相关文章

  1. C#开发Unity游戏教程之Unity中方法的参数

    C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“( )”,有意义吗?看起来最多也就是起个快速识别 ...

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

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

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

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

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

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

  5. HealthKit开发快速入门教程之HealthKit开发概述简介

    HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为“He ...

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

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

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

    C#开发Unity游戏教程之游戏对象的属性变量 Unity游戏对象的属性——变量 通过对上一章的学习,读者应该了解到了,游戏对象上的属性与脚本中的变量,建立联系的方式就是将脚本赋予游戏对象.上一章只是 ...

  8. C#开发Unity游戏教程循环遍历做出推断及Unity游戏演示样例

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

  9. HealthKit开发快速入门教程之HealthKit数据的操作

    HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...

随机推荐

  1. VMware Workstation 12序列号:

    VMware Workstation 12序列号: 5A02H-AU243-TZJ49-GTC7K-3C61N

  2. Hadoop生态圈-flume日志收集工具完全分布式部署

    Hadoop生态圈-flume日志收集工具完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   目前为止,Hadoop的一个主流应用就是对于大规模web日志的分析和处理 ...

  3. nova-api源码分析(APP的创建)

    目录结构如下: 上面介绍了nova-api发布所用到的一些lib库,有了上面的基础知识,再来分析nova-api的发布流程,就比较轻松了.nova-api可以提供多种api服务:ec2, osapi_ ...

  4. Spark记录-Scala类和对象

    本章将介绍如何在Scala编程中使用类和对象.类是对象的蓝图(或叫模板).定义一个类后,可以使用关键字new来创建一个类的对象. 通过对象可以使用定义的类的所有功能. 下面的图通过一个包含成员变量(n ...

  5. bzoj千题计划250:bzoj3670: [Noi2014]动物园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...

  6. bzoj千题计划179:bzoj1237: [SCOI2008]配对

    http://www.lydsy.com/JudgeOnline/problem.php?id=1237 如果没有相同的数不能配对的限制 那就是排好序后 Σ abs(ai-bi) 相同的数不能配对 交 ...

  7. 在html5 canvas的destination-atop属性的一些奇怪的问题

    最近在整理canvas的时候发现HTML5 Canvas开发详解一个奇怪的属性解释 目标图形是显示在画布上的位图 而原图形是指要回执在画布上的形状 w3school上面是这样说的 destinatio ...

  8. javascript沙箱模式

    沙箱模式解决了命名空间模式的如下几个缺点: 1.对单个全局变量的依赖变成了应用程序的全局变量依赖.在命名空间模式中,是没有办法使同一个应用程序或库的2个版本运行在同一个页面中.2.对这种以点分割的名字 ...

  9. shell 判断为空打印

    判断参数是否为空-空退出并打印null #!/bin/sh echo $ name=${:?"null"} echo $name

  10. 洛谷 P1045 【麦森数】快速幂

    不用快速幂,压位出奇迹! 本人是个蒟蒻,不太熟悉快速幂,这里给大家介绍一种压位大法. 让我们来分析一下题目,第一位是送分的,有一个专门求位数的函数:n*log10(2)+1. 然后题目中p<=3 ...