《Unity 5.x游戏开发实战》一2.2 Unity中的C#脚本

简介:

本节书摘来异步社区《Unity 5.x游戏开发实战》一书中的第2章,第2.2节,作者: Alan Thorn 译者: 李华峰 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.2 Unity中的C#脚本

为游戏定义逻辑、规则和行为的时候,往往需要使用到脚本。如果想将那些静态的、无生命的场景和对象转换成为可以进行交互的环境和对象,那么开发人员就需要编写代码。这些代码定义了这些物体在遇到了指定情况之后,应该做出什么样的反应。金币采集游戏也需要编写代码才能实现所有的功能。这个游戏需要实现3个主要的 功能:

  • 能够感知玩家是否收集到金币;
  • 在游戏进行中,能够及时了解到玩家收集的金币数量;
  • 能确定游戏时间是否已经结束。

在Unity中并没有包含一个能实现上述功能的模块。所以必须自己来编写一些代码来实现这些功能。Unity中支持两种语言,即UnityScript语言(有时候称之为JavaScript语言)和C#语言。这两种语言功能都很强大,但是本书中主要采用的是C#语言。这是因为从发展的趋势来看,JavaScript的使用率将会逐渐下降。现在开始对这个主要功能进行编程。首先在项目(Project)面板的空白区域单击鼠标右键,然后在弹出的上下文菜单中依次选择“Create | C# Script”,就可以创建一个新的脚本文件。另外,也可以从应用程序菜单处依次选择“Assets | Create | C# Script”来创建一个新的脚本文件,如图2.11所示。


11

当创建了脚本之后,需要为脚本起一个描述性的名字。本书起的名字为“Coin.cs”。在Unity中,每一个脚本文件都对应一个与其同名的类。因此,“Coin.cs”文件对应的就是“Coin”类。这个“Coin”类将封装一个金币的所有行为,并最终会附加到场景中的金币上,如图2.12所示。


12


在对象检查(Inspector)面板中双击Coin.cs,就可以使用MonoDevelop打开这个文件。MonoDevelop是一款Unity自带的第三方IDE应用,它可以实现对游戏中的代码进行编写和修改。当一个文件在MonoDevelop中打开之后,它的内容就会如代码示例2.1所示的在MonoDevelop中显示出来。

代码示例2.1:

using UnityEngine;
using System.Collections;

public class Coin : MonoBehaviour
{
  // Use this for initialization
  void Start () {}

  // Update is called once per frame
  void Update () {}
}

注意 代码示例的下载

可以使用自己的账号从http://www.packtpub.com .处下载本书的代码示例。无论你在哪里购买的本书,都可以访问http://www.packtpub.com/support 并进行注册,书中的资源也可以通过电子邮件的形式发送给你。

可以按照如下步骤来下载这些文件:

  • 使用电子邮箱地址在页面上注册,如果已经注 册过了,那么直接登录即可;
  • 找到并使用鼠标单击位于页面顶端的“SUPPORT”;
  • 单击“Code Downloads & Errata”;
  • 在搜索search框中输入要下载资源的书的名字;
  • 选择要下载资源的书;
  • 在下拉菜单中选中购买本书的地点;
  • 单击“Code Download”。

将这些文件下载了之后,要确定解压缩软件已经更新到了最新的版本:

  • WinRAR / 7-Zip for Windows;
  • Zipeg / iZip / UnRarX for Mac;
  • 7-Zip / PeaZip for Linux。
    默认情况下,所有新创建的类都派生自“MonoBehavior”类,这个类中定义了一些对所有组件都通用的函数。“Coin”类具有两个自动生成的函数,也就是Start()和Update()。这些函数都是由Unity自动调用的事件。当游戏对象(关联了这个游戏脚本)在场景中创建时,就会调用Start()函数。Update()函数会在每一帧被附加了游戏脚本的对象中调用一次。Start()函数主要用来实现代码的初始化,Update()函数主要用来实现那些随着事件推移的行为,例如运动和变化。现在,将新创建的脚本文件与场景中的金币对象进行管理,可以从项目(Project)面板处将“Coin.cs”文件拖曳到金币对象上。当完成以后,一个新的金币组件就被添加到了游戏对象上。这意味着这个脚本已经关联到了游戏对象上,如图2.13所示,一个关联了脚本的游戏对象。


13

当一个脚本与一个游戏对象关联到一起之后,这个脚本就作为这个游戏对象的一个组件而存在。一个脚本文件可以添加到多个游戏对象上,甚至可以被多次添加到同一个游戏对象上。每个组件都代表着一个单独而且不同的类的实例化。当一个脚本以这种方式添加进来之后,Unity会自动地调用它的函数,例如Start()和Update()。可以在Start()函数中加入一个Debug.Log语句来确认脚本是否能正常工作,这个语句在场景中的游戏对象被创建时在命令行窗口输出一个调试信息。查看如下所示的代码示例2.2。

代码示例2.2:

using UnityEngine;
using System.Collections;

public class Coin : MonoBehaviour
 {
  // start()是初始化函数
  void Start () {
    Debug.Log ("Object Created");
  }

  // Update在每一帧调用一次
  void Update () {

  }
}

如果按下工具栏上的“Play”键,或者按下键盘上的“Ctrl + P”组合键,来运行这个向游戏对象上添加了前面的那个脚本的游戏,就会在控制台窗口中看到一条内容为“Object Created”的信息,每当这个类进行实例化的时候,都会输出一次(见图2.14)。


14

现在已经为Coin类创建了最基本的脚本,并且已经将这个脚本成功附加到了金币对象上。接下来,继续编写一些函数,这些函数将会记录采集过的金币信息。

相关文章
|
8月前
|
机器学习/深度学习 人工智能 图形学
卓伊凡的第一款独立游戏-详细介绍游戏开发引擎unity-以及详细介绍windows和mac的安装步骤【01】
卓伊凡的第一款独立游戏-详细介绍游戏开发引擎unity-以及详细介绍windows和mac的安装步骤【01】
635 9
|
8月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
1061 3
|
图形学 开发者
Unity编辑器脚本(添加/删除)碰撞盒
这段代码提供了两个Unity编辑器工具,用于批量处理模型的碰撞盒。一是“一键添加所有碰撞盒”,通过选择模型的父物体,自动为其子物体添加`MeshCollider`。二是“一键清理所有Collider碰撞盒”,同样选择父物体后,递归删除子物体上的`BoxCollider`组件。两者均通过Unity的菜单项实现便捷操作,方便开发者快速调整场景中的物理属性。
|
缓存 图形学
Unity C#for和foreach效率比较
该代码对比了三种遍历 `List<int>` 的方式的性能:使用缓存 `Count` 的 `for` 循环、每次访问 `list.Count` 的 `for` 循环以及 `foreach` 循环。通过 `Stopwatch` 测量每次遍历 300 万个元素所花费的时间,并输出结果。测试可在 Unity 环境中运行,按下空格键触发。结果显示,缓存 `Count` 的 `for` 循环性能最优,`foreach` 次之,而每次都访问 `list.Count` 的 `for` 循环最慢。
|
安全 Java C#
Unreal Engine C# 脚本编写浅谈
本文介绍了在 Unreal Engine 中使用 C# 编写脚本的方法,涵盖环境搭建、基础概念、常见问题及代码案例。从安装插件到处理输入事件和加载蓝图,详细讲解了如何在 Unreal Engine 中高效利用 C# 进行开发。
636 3
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
689 4
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
1253 4
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
1271 3
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
1099 3