IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【Unity3d实战开发】第3章 三消小游戏制作(二) 启动器场景、介绍通用模块与框架 -> 正文阅读

[游戏开发]【Unity3d实战开发】第3章 三消小游戏制作(二) 启动器场景、介绍通用模块与框架

Unity Editor基础视图介绍

该小节仅面向未接触过Unity的读者,已经了解甚至熟悉Unity的读者可自行跳到下个章节

为了方便介绍,请各位读者先点击右上角的切换布局按钮,切换成2 by 3然后手动调整成下图的布局样式。

切换布局

Editor基础视图
上图所标记的区域,按顺序分别是:

  1. 菜单栏
    由Unity或第三方插件或自己编写的菜单栏,具体点击后有什么效果是各自实现的,读者可自行尝试点击。

  2. 工具栏
    由Unity或第三方插件或自己编写的工具栏,先只需知道中间是运行游戏、暂停游戏、逐帧调试按钮即可。

  3. 场景编辑视图
    读者可以在该视图内对当前打开场景的对象进行选中、拖拽等等之类的操作。

  4. 游戏实时画面视图
    近似于玩家在当前环境下能看到的画面结果

  1. 场景对象列表视图
    显示当前的场景中包含了哪些对象,可以对对象进行增删改等操作
  1. 项目资产列表
    显示当前项目总共有哪些资产(包含广义上的资源文件与代码文件以及各类第三方库等等)

  2. 项目引用的Package(代码包)列表
    Unity 2017版本后引入名为Package Manager的代码包管理工具,在该视图内,可以看到通过Package Manager引入了哪些由Unity提供的拓展包、第三方库提供的包、自己编写的包等。

  1. 选中对象的属性视图
    可以看到当前选中的对象由哪些组件组成,而这些组件又有哪些属性值,这个对象上对这些属性值设置了具体哪些值等等。同时可以在该视图上对选中的对象进行添加、修改、移除组件的操作。

可能刚接触Unity的读者看到这瞬间就懵了,似乎说了很多奇奇怪怪的东西,没有关系,我们先抓住最基本的重点:场景对象组件

  • 对象

    先从对象开始讲起,因为对象在三者中可谓是起到了承上启下的作用。什么是对象?在Unity中,这边所指的对象英文单词是GameObject,所以更合适的称呼应该称之为游戏对象

    游戏对象是Unity的基础要素之一。一个会走路、会跳跃、会拿火球砸人的法师角色是一个游戏对象,被他砸出去的火球,也可能是一个游戏对象;一面看不到的空气墙,也是一个游戏对象;一盏光源,也是一个游戏对象

    游戏对象面向对象编程中所提到的对象有些相似,又有些不同,可以先简单地将其当作资源逻辑组合所得到的产物,由大大小小若干个游戏对象组成了缤纷多彩的Unity游戏世界。

  • 场景

    场景是一个盛放游戏对象的容器,游戏对象必须被创建到场景中(这个过程被称之为实例化),它的逻辑才能跑起来,它才有机会被玩家看到(实际上还牵涉到相机等其他因素)。

    在Unity的设计上,游戏运行时,必须至少有一个场景处于激活状态(但场景允许是空的,没有游戏对象的存在)。它与我们平时所说的登录场景平台场景玩法场景并不能直接划等号,这点在后续开发过程中大家就会发现,这边不详细说明。

  • 组件

    在解释游戏对象是什么时,笔者提到,可以先简单地将其当作资源与逻辑组合所得到的产物,之所以这么描述是因为游戏对象本身是没有直接运行游戏逻辑的能力的,它需要借助组件的力量。

    每个游戏对象都由若干个组件组成,每个组件都带有它各自的属性与行为,例如每个游戏对象都带有Transform组件,它定义了游戏对象在整个游戏世界中的哪个位置(position),要面朝哪里(rotation),以什么样的姿态展示在游戏中(scale缩放比例)。

启动器场景(根场景)的秘密

上文我们已经提到,在Unity的设计中,游戏运行时必定至少有一个场景处于激活状态,所以我们通常会设置一个场景为启动器场景(或者称为根场景,即游戏运行时的第一个场景)

在该项目中,我们的根场景Scenes/RootScene,让我们在资产目录找到它,然后双击打开它,看看它有什么秘密。

打开root
场景对象列表视图(Hierarchy)中,我们可以看到RootScene只有一个Root对象,点击它,在右侧的选中对象的属性视图(Inspector)上,可以看到Root对象除了默认的Transform组件外,只有一个Root组件。看来,这个场景的奥秘就在Root组件中。

点击下图标记的按钮,在弹出的菜单中点击Edit Script选项,打开查看该组件的实现代码。

Edit Script
如果没有错误的话,读者之前安装的Jetbrains RiderVisual Studio应该已经打开了该项目的代码解决方案,并定位到该组件对应的代码文件了。

如果能正常打开,点击此处

如果没能正常打开,那么返回Unity,点击菜单栏Edit - Preferences(mac上是Unity - Preferences)。

Preferences
在弹出的Preferences窗口的左侧,选择External Tools一项,然后按照下图所示,选中安装好的Jetbrains Rider或者Visual Studio或其他IDE。

Select IDE
然后重新对Root组件点击Edit Script即可。

Root Script
在该代码文件中,有三个部分是需要注意的:

  • MonoBehaviour

    MonoBehaviour是所有我们自定义组件的基类

  • Start

    Start是MonoBehaviour生命周期之一,它会在该组件被启用时运行且只运行一次。

    关于MonoBehaviour和其生命周期的知识,希望读者能好好看下Unity3d官方这篇讲解https://docs.unity3d.com/cn/current/Manual/ExecutionOrder.html

  • Start内部的一大串实现

    此处代码的大致含义是借助TinaX的核心类XCore初始化若干通用服务(资产服务、本地化配置服务、UI工具服务、输入服务、音频服务、GameFramework服务等)。

关于TinaX的那些事

依赖注入与控制反转

在讲TinaX开发框架前,我们必须先了解一下什么是依赖注入(DI,Dependency Inject)以及什么是控制反转(IoC, Invert of Control)

实际上我也纠结过是否提到这两个概念,因为有不少读者应该是刚接触的编程。但考虑到养成习惯需要时间,而一开始就养成一些好习惯利大于弊。

抛开一些花里胡哨的噱头不谈,控制反转的核心依旧是面向对象编程中最老生常谈的事情——面向接口编程(希望刚接触编程的读者朋友一定要牢记面向对象的三大基本特征五大基本原则,并且在开发过程中,不断掌握他们,而不仅仅只是面试答题用)。

关于依赖注入控制反转有兴趣的可以看看https://www.zhihu.com/question/32108444,我想了很久,实际上也写了一个例子想向初学编程的读者朋友解释这个概念,但是看到我写了几百个字的例子用于描述,感觉过于枯燥了。所以大家先在脑海里记住面向接口编程,然后等后面实战开始后,便自然而然懂了。

TinaX提供的通用服务

TinaX为我们封装了不少游戏开发常用的服务,让我们不用造轮子,可以开箱即用。

VFS——资源管理服务

对Unity的各类资源管理模式进行业务级别的统一封装(与Unity提供的Addressables可寻址资源系统有点类似,但就目前而言,TinaX的VFS服务更方便使用),让开发游戏功能的人不用关注资源存在哪里,如何加载,仅需用统一的键值向VFS服务请求资源即可。

I18N——本地化服务

基于key/value形式的国际化支持服务,让你的应用对全世界不同语言和地区的用户更加友好。

UIKit——UI服务

提供了基于UGUI的UI管理服务,如打开、关闭、隐藏UI、全屏UI互相避让、UI启动参数等。同时提供对组件的扩展、可扩展的UI动画等相关内容。

其他服务

可以参考TinaX的官方文档自行接入https://tinax.corala.space

写在结尾的话

这篇写的有点纠结,因为感觉讲起来实际上要花很大的篇幅去说,但是对于刚接触的读者朋友来说可能又很枯燥,写了删删了写,最后决定还是先这样吧,从下篇开始,先不多做解释,让我们先开始实战开发。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-07-05 20:29:10  更:2021-07-05 20:29:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 20:22:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计