![](https://img-blog.csdnimg.cn/direct/450c414f2f5544f89f58467e0923fdf4.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Unity脚本编程与C++网络游戏开发
文章平均质量分 93
Unity开发工程师是一种专门负责使用Unity引擎进行游戏或者应用程序开发的工程师。他们使用C#或其他编程语言,实现游戏或者应用程序中的各种功能,比如场景搭建、物理引擎、用户交互等等。他们需要具备扎实的编程技能、游戏开发经验以及对Unity引擎的深入了解。此外,他们还需要有良好的团队合作精神和沟通
BinaryStarXin
专注于网络技术、各类计算机热门行业技术研究分享、嵌入式开发、人工智能、后端与前端等方面的技术知识文章分享,欢迎留言
展开
-
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【4.5】
(2)完成了服务器的cpp程序开发,还需要开发一个客户端。新建一个TCPClient工程,然后新建TCPClient.cpp代码文件,让客户端完成对服务器的连接,并且对服务器发送一条连接信息,接收来自服务器的反馈信息。(3)完成程序的开发后,来查看TCP套接字在连接以后信息收发和监听的过程。首先编译并运行TCPServer的运行程序,打开监听本机的端口;然后编译运行TCPClient,使用客户端对服务器的连接并发送一条信息;接着客户端会接收来自服务器的一条信息,这样就完成了整个流程,结果如图12-8所示。原创 2024-05-07 21:15:42 · 330 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【4.4】
地址和通信的作用域相关,所以为了让各种格式的地址(如用域名和端口等表示的地址)都能够传入套接字的参数,那么地址在传入参数前需要统一切换成API能使用的格式sockaddr。在不同的处理器架构下,发送的信息具有不同的字节顺序,如果要实现不同架构机器之间的通信,那么就必须要统一字节的顺序。(2)为了支持后面的工程,需要在工程的属性中添加Socket库的内容,可以在连接库中输入ws2_32.lib,进行静态库的调用,如图12-5所示。准备好运行编程的环境,在12.5节中,我们将介绍Windows的服务开发。原创 2024-05-07 21:06:30 · 984 阅读 · 2 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【4.3】
除了上面介绍的数据结构STL,还有其他数据结构,如下所述。·statck:栈的数据结构,具有后进先出的特点。·deque:队列数据结构,具有先进先出的特点。·priority_queue:优先队列数据结构,底层采用vector向量来实现。·list:双向链表容器,可以参考在前文编写的链表数据结构的实现,在基础上增加了从后往前的迭代器。·slit:单向链表容器,只有一个方向的访问迭代。·bit_vector:一个比特单元的序列容器。原创 2024-05-07 20:52:03 · 902 阅读 · 1 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【4.2】
通过前面的学习,相信大家已经对C++有了一定的了解。但是在真正的应用和大型系统的开发当中,C++原生标准中所附带的数据结构是不足以支撑开发的。如果通过自身来开发各种数据结构,既无法保障内存的控制和执行效率,也会影响开发进度。一般来说,C++的开发还需要熟悉一个常用的数据结构库——STL(Standard TemplateLibrary)。本节我们就一同来学习STL中常用的一些数据结构和原理。STL为我们提供了一些常用的数据结构和算法的模板。在STL中大家需要牢记三个重要的概念,如下所述。原创 2024-05-07 20:40:05 · 719 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【4.1】
类的静态成员:类中的数据成员和函数成员都可以使用static来声明为静态的对象,然后通过类::的方法来访问类中的静态成员。当定义了一个指针变量以后,把变量的地址赋值给指针,使用指针就可以访问不同地址的对象,然后使用符号->访问指针指向的地址对象或者使用*符号直接访问指针指向的值。对于基类中的构造函数,派生类是不继承的,基类的构造函数和派生类的构造函数都是基于自身进行运行的。·protected:确定了在类对象的作用域内,保护成员在类的外部是不可以访问的,但是在类的派生类中是可以访问的。原创 2024-05-07 20:24:46 · 896 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【4.0】
在C++中,函数一般是由一个函数头和一个函数体组成,在一个函数中包含了四个主要的元素。·返回类型:一个函数可以返回一个值,也可以返回一个空,return是函数返回的关键字,为每个函数返回计算结果。·函数的命名:一个函数是必须要有一个函数命名,这样才能在其他地方调用这个函数,C++的编译器会针对函数的命名编译出符号,在内存中就能调用这个函数了。·函数参数:函数中可以定义若干个参数,也可以不定义参数,它作为函数和外部数据的连接体,可以针对外部传入的参数进行计算和返回结果。原创 2024-05-06 23:28:50 · 992 阅读 · 3 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.9】
C++是一个什么样的语言呢?在C++发展的历程当中有哪些重要的变化?我们要掌握C++到什么程度,才足以支持整个仿真系统服务器的开发呢?C++是一种使用非常广泛的程序设计语言,它是一种静态数据类型检查,并且支持多范型的通用程序设计语言。在程序设计方面,C++支持的程序设计风格有过程化程序设计、数据抽象化设计、面向对象程序设计、泛型程序设计和基于原则设计等。C++这个名字是在1983年被Rick Mascitti所建议的,并于1983年12月首次使用。原创 2024-05-06 23:12:59 · 1062 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.8】
如何管理UI资源的引用?(3)本章开发了仿真系统的各个UI面板,为大家介绍了登录UI、大厅人物系统UI和战场场景交互UI三个面板的开发。·人物和UI面板的互动操作,是基于UI中使用了Game.Instance.GetHostPlayer()来获取HostPlayer这个仿真人物类(见第7章中的相关介绍),通过它相关的函数和属性来操作人员。VRGUI的方式就是把NGUI制作成为3D资源,然后通过3D世界的Camera来渲染,提供一个3D世界的射线检测器,检测UI的操作状况,并且提供事件返回给各个UI组件。原创 2024-05-06 21:29:13 · 1138 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.7】
打开代码UIMainGame.cs,这是UI整体管理的一个类,在UI注册的函数RegisterDlgInstance中,为UI_LoginMain注册绑定对应的脚本程序DlgLoginMain.cs,具体注册代码如下:case DlgLoginMain.NAME: dlg = uiRoot.AddComponent(2)编辑完成以后,选择UI_LoginMain的根节点,然后在Insepector视图中选择Apply,对UI预制体的编辑就会保存到文件资源中。原创 2024-05-06 21:18:01 · 895 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.6】
比如,一个300像素的物体,占用了1920分辨率屏幕的25%的百分之宽度,当把分辨率降低或者放大的时候,它所占用的宽度比依然相同,它会随着屏幕分辨率的改换而进行放大和缩小。(3)在Hierarchy中将刚才创建的对象添加到聊天ScrollView下面,成为子对象,并且调整相对的位置和UIPanel的显示效果,就可以完成静态功能的编辑了。UIButton是按钮组件,这是NGUI里面最重要,也是使用最多的一个控件,它处理了大部分的UI的单击事件,并且为系统的功能反应提供了最基本的入口。原创 2024-05-06 21:09:22 · 981 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.5】
本章使用NGUI来搭建整个仿真系统的UI控制系统。NGUI是Unity的一个插件,它可以极大地提高UI面板的开发生产效率。这句话怎么解释呢?首先要比较Unity原生GUI和NGUI插件系统之间的优劣和区别。GUI是Unity默认的UI库。它渲染UI的原理,是直接在引擎光栅化之前绘制将UI成像在屏幕表面。所以GUI执行效率不高,更关键的是没有特别好的接口帮助开发,开发者使用它开发UI效率比较低。原创 2024-05-06 20:52:16 · 973 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.4】
地雷是一种爆炸性的动态资源,当人或者车辆进入地雷的范围内,地雷就会发生爆炸,播放爆炸特效,并且发送人员或者车辆的被伤害信息。在这个基础上,地雷会以它的位置为圆心向周围发出一股爆炸力,这个力的效果呈周期性递减,在这个力的范围内,所有车辆都会受到这个力的作用并且受到影响。·提供了资源的更新以后,还需要提供所有资源的统一销毁功能,以方便在场景切换或者资源总体更新以后销毁原来加载的总体资源。·检测地雷和车辆之间的距离,如果人物接近了地雷的爆炸力范围,就产生爆炸特效,并且给服务器发送爆炸相关的信息。原创 2024-05-05 23:59:08 · 658 阅读 · 1 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.3】
(4)在Hierarchy视图中选中车辆的轮胎,在Inspector视图中,可以看到车辆动力系统另外一个重要的组成部分——轮胎。通过以上步骤就完成了动力组件的集成和预制体的开发。车辆的动力系统在代码中加载的方式可以总结为以下流程:Init加载车辆预制体对象→获取动力组件→基于data数据给动力组件赋值→根据车辆的状态机操作动力组件→改变当前车辆状态和动力制动方式。需要使用这个指针的接口时,在函数返回之前先调用一次AddRef,因为在接口调用结束时会对这个引用的栈产生一次销毁,所以需要先记录一次调用。原创 2024-05-04 23:01:34 · 1023 阅读 · 1 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.2】
这一段代码中,除了编辑器的使用,AssetExportor类的使用是它输出的核心,是后台打包输出的逻辑。AssetBundle是Unity定义的一种存储资源文件的格式,它的作用是存储任意Unity定义可以识别的文件格式,包含Scene、Mesh、Material、Texture、Audio和noxss等格式。在工程当中,还需要导入相关的资源插件,以及功能组件代码,如图9-3所示。·dynamicItem.data:动态资源所使用的资源数据,包括枪械、地雷、道路、震石等,它是资源的数据集群。原创 2024-04-30 23:43:00 · 969 阅读 · 3 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.1】
(2)同样,选择Window→Lighting→Settings选项,弹出编辑面板,在Other Settings中有关于雾化渲染效果的处理,勾选Fog选项,并调整雾化的颜色和参数属性,在Scene视图中就可以看到整个场景雾化和远处雾化的效果了,如图8-26所示。在8.10节完成了场景中天空盒的设置、太阳光照渲染的设置、雾化效果的设置、道路和环境的设置、水流的设置、建筑和地形的设置,基本上完成了场景的环境制作,接着就需要对整个场景的渲染效率和使用效率进行优化,具体步骤如下所述。原创 2024-04-30 21:26:03 · 917 阅读 · 1 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【3.0】
把预制体放入Scene视图中,可以看到水流是一个圆盘形状的物体,调整水面的高低度填充沟壑,和地平面保持一定距离,这样就完成为整个地形环境附加水流平面了。比如在下雨天,地面会更为湿滑,在大风的环境,除了风力影响,也会影响行车的视线,在雪地的环境下,雪花和雾气对视线也会产生影响。(1)打开客户端工程中的BattleScene场景,在本书附带的资源中找到UniStorm文件夹,导入Project视图中Assets文件夹,完成插件的导入。在基础篇中的shader渲染中,介绍过水流shader的编写及它的使用方式。原创 2024-04-30 21:16:56 · 571 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.9】
(2)在Inspector视图中单击Select,这时候在Project视图中会选中当前预制体对应的资源,并且显示其路径。打开路径可以看到对应的资源在BattleScene文件夹中,在这个文件夹中寻找一个训练标识牌和一个开始位置的建筑。我们把建筑拖动放到Hierarchy视图中的xuexian节点下面,然后进入Scene视图,调整物体的旋转角度和位置,把它放置到任务的起始位置。在Scene视图中,可以看到这些物体都有绿色碰撞体,包括地面也有地形碰撞体,这是程序计算地形碰撞和处理交互的必要准备。原创 2024-04-30 21:11:06 · 686 阅读 · 2 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.8】
(3)导入场景资源文件以后,可以看到工程中有了所需要的场景资源文件。我们找到对应的data文件夹,然后放置到工程的外置资源文件夹下面,其中有一个data数据文件夹CarProject/rhino_resource/www.sintolvr.com/data,里面的每一个data文件都代表一段配置文件数据,如图8-4所示。定位场景中的雪地环境,在Hierarchy里选中xuexi场景的对象,然后选择qidian对象,双击该对象,在Scene视图中可以看到场景跳转到了选中的开始位置标识牌处,如图8-7所示。原创 2024-04-30 21:02:27 · 462 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.7】
读者可以研究更多的游戏,比如ARPG、体育游戏、仿真运动等类型,思考一下结合不同的应用场景、不同的控制算法,实现更多的人体控制的运动方式。然后通过物理射线的检测算法,检测射线方向上是否有瞄准的物体,是否有其他的碰撞体遮挡,最后进行人物的射击交互操作。结合在基础篇中学习的知识,请读者思考这些问题:在代码中有一个HeadObj对象,表示人物的头部节点,它在编辑器中是如何和动作绑定在一起的?·本书在基础篇中曾介绍了一种射线检测碰撞的算法方式,本节在系统程序中使用的就是这种检测算法,通过弹道的射线进行射击检测。原创 2024-04-30 20:55:29 · 500 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.6】
在每个时刻,机器头都要从当前的时间轴上读取状态信息,然后在自己的内部状态信息中查找当前播放的状态信息,输出状态信息到外部,并转换自己的内部状态,最后进行移动和准备工作。7.3节导入了数据资源,并且讲解了关于数据资源读取的代码程序,这段代码属于CarProject中非常重要的一个类HostPlayer,是用于人物控制的主要的类。在代码里根据用户的两个操作:按下鼠标左键和放开鼠标左键,控制不同的状态,根据不同的状态控制特效的激活和关闭。7.4节学习了人物的控制和脚本程序的开发,在代码里有运动状态的枚举。原创 2024-04-29 21:21:32 · 1162 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.5】
所谓的虚拟仿真训练,就是运用3D图形技术、传感器技术、训练指标技术,创建出一个虚拟的三维空间,并且与人体的感官结合。它是一种虚拟世界训练和真实感觉结合的训练方式,可以极大地节省资金,也可以实现一些现实中难以参与的训练模拟。本节将介绍在虚拟仿真训练系统的开发当中,虚拟仿真技术和网络开发技术的各类知识,如人物仿真、车辆操作仿真、任务仿真、环境仿真、网络仿真等各个知识点,掌握网络智能开发的整个知识体系和环节。仿真训练系统包括哪几个部分呢?如图6-3所示为系统的物理架构。图6-3 物理架构图。原创 2024-04-28 21:16:50 · 780 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.4】
在5.14节导入了车辆,并且为车辆制作了金属材质。这一节来介绍使用Unity编辑器编辑车辆的物理碰撞,并且让车辆和人物产生碰撞互动,具体步骤如下所述。(1)打开最初人物所在的场景,通过5.14节编辑的Prefab文件,导入修改后的车辆模型,放到人物旁边,如图5-48所示。(2)运行场景程序,在Game视图中,可以使用键盘W、A、S、D的这4个按键控制人物的行走方向。这时可以发现,人物是能穿透车辆的,如图4-49所示,人物有一半身体进入了车里面。原创 2024-04-26 23:36:52 · 989 阅读 · 3 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.6】
本节将介绍网络协议这个概念。在后面的Unity开发中,我们会使用一种网络协议框架Protobuf,用它来制作网络协议和服务器进行通信信息的传输。Protobuf是Google的一个开源项目,主要的用途有两个:一是数据存储(序列化和反序列化),这个功能类似XML和JSON等;二是制作网络通信协议。Protobuf协议有两个主要的数据:协议号和协议类型。原创 2024-03-25 10:06:55 · 1383 阅读 · 1 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.5】
在我们的系统当中,由于一些资源的加载和耗时的处理会影响整个系统运行的流畅性。这个时候就需要使用多线程编程,使用更多的CPU内核进行运算。C#在它的接口空间threading中提供了多线程开发的类和接口,能够给开发者提供非常方便的函数和方法,可以跟操作系统进行多线程的交互处理。本节将介绍常用的多线程编程方式。Thread是C#中最常用的多线程操作方法。它提供了对线程的各种灵活操作,使用的具体步骤如下所述。(1)使用Thread的构造函数创建一个线程的实例,它的参数里面需要给出线程运行的函数方法。原创 2024-03-24 16:10:16 · 923 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.1】
C#语言从本质上来说是在C++语言的基础上衍生出来,它是基于托管生成和指针管理的一种面向对象的编程语言。相比C++语言,它是一门更加简单、安全和易于学习的语言。它继承了C++语言强大的功能,摒弃了一些C++语言里比较复杂的使用方法,比如去掉了宏模板多重继承这些复杂的概念。C#语言借用了Visual Basic语言的可视化编程方法,基于.NET的开发库,开发了一套C#使用的可视化编程库,让C#语言,既拥有C++语言的强大能力,也更加人性化,让开发人员更加易于上手。C#语言具有以下特性:·语言简洁。原创 2024-03-24 14:17:59 · 678 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.0】
本书给大家介绍一个智能系统整体开发的知识体系和流程方法。本章是本书开始篇章,将为大家介绍掌握客户端必要的基础知识,以及基于客户端开发的框架和工具链——Unity。现在就让我们开始关于Unity引擎的学习吧。Unity是一个在当今图形开发领域占有重要地位的图形引擎。Unity引擎以其先进的构造理念和长久的发展,如今在游戏和图形开发领域中是开发者使用最多、工作效率最高,以及最适合入门的一门开发引擎。Unity引擎平台有哪些组成部分呢?下面将详细介绍。目前,Unity是在全球范围内应用最广泛的3D引擎。原创 2024-03-24 13:28:14 · 858 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.3】
进入空的工程以后,首先看到的是Unity编辑器界面的布局。这一节来认识Unity界面布局,并且构建自己喜欢的布局风格。如图5-4所示为初始界面的布局,整个编辑器从最大层面上可以分为5大部分:场景视图(Scene)、游戏视图(Game)、层级浏览视图(Hierarchy),项目资源浏览视图(Project)、监视视图(Inspector)。场景视图:是用户和场景交互编辑的沙盒,可以使用场景视图来编辑定位环境、玩家、相机和三维对象。场景视图就是一个3D的编辑工具,可以随意编辑场景中的内容。原创 2024-04-26 22:57:33 · 539 阅读 · 1 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.2】
读者可能对本章的学习感觉有一些难度,这是正常的,随着学习深入,读者会逐渐明白它的原理。可以看到,我们的屏幕上出现了屏幕流水的效果,就像下雨天车窗玻璃被雨水覆盖的效果,如图4-18所示。什么是固定管线渲染?本节将实现一个屏幕渲染的水幕的效果,就像在下雨时开车,挡风玻璃被雨水覆盖的效果,如图4-16所示。(2)三维坐标系的计算和算法:本章介绍了基础的三维坐标系的概念和实际的应用,读者可以继续学习三维坐标系的多种应用,了解Local、World、投影坐标系变换和应用方式,深入了解三维坐标系的作用。原创 2024-04-26 21:30:41 · 943 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.1】
一般是根据目前已经绘制好的颜色,与正在计算的颜色的透明度(Alpha),然后根据权值混合为两种颜色,作为新的颜色输出。从平面上很高的高度y点,垂直地向平面发射一条射线,检测射线和物体的碰撞。返回值说明:从屏幕的上的一点position发射一个射线到3D世界空间,然后通过3D世界空间的摄像机作为原点进行计算,如果计算到碰撞就返回碰撞信息,如果没有计算到碰撞,就返回碰撞点为(0,0,0)。在算法上,使用时间和欧拉角进行计算,让物体通过一段时间段的平滑旋转,达到所需要旋转的目标角度,角度是由鼠标拖曳幅度决定的。原创 2024-04-26 00:00:24 · 1033 阅读 · 1 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.0】
上一节介绍了Shader和光照模型的计算。通过Shader的计算、光照模型,以及纹理的处理,我们可以设计出各种各样的光照和材质计算方法,从而模拟出现实世界各种各样的物体材质。这一节就来介绍材质的编写方法。Shader在编写和开发时,有对应的Shader语言。在这里介绍一下Unity在开发Shader时所应用的GPU语言:Cg语言。//主属性输入,包含:主颜色,主纹理,法线贴图,透明测试比较裁剪值Properties//子着色器,是表面着色器SubShader。原创 2024-04-25 22:34:40 · 1076 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.9】
光源对物体的照明分类,大致可以分为两种:间接照明和直接照明。·间接照明:在光传播过程中,光在经过物体间的传播以后,又对其他物体形成了一种照明效果,我们就把这种效果称为间接照明。对于3D图形应用来说,最重要的技术特点是实时渲染。间接照明的计算和烘焙需要经过长时间的计算才可以得出,因此这部分照明在实时渲染技术中是很难实现的。在实际应用中,一般是经过预烘焙得到数据。间接照明通常作为一个常量来参与计算。·直接照明:如果不考虑光在物体间的传播,也不考虑光在物体内部的传播,就是光对物体的直接照明。原创 2024-04-25 21:45:01 · 592 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.8】
本节将介绍网络协议这个概念。在后面的Unity开发中,我们会使用一种网络协议框架Protobuf,用它来制作网络协议和服务器进行通信信息的传输。Protobuf是Google的一个开源项目,主要的用途有两个:一是数据存储(序列化和反序列化),这个功能类似XML和JSON等;二是制作网络通信协议。Protobuf协议有两个主要的数据:协议号和协议类型。原创 2024-04-24 19:00:40 · 1183 阅读 · 0 评论 -
Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.7】
在我们的系统当中,由于一些资源的加载和耗时的处理会影响整个系统运行的流畅性。这个时候就需要使用多线程编程,使用更多的CPU内核进行运算。C#在它的接口空间threading中提供了多线程开发的类和接口,能够给开发者提供非常方便的函数和方法,可以跟操作系统进行多线程的交互处理。本节将介绍常用的多线程编程方式。Thread是C#中最常用的多线程操作方法。它提供了对线程的各种灵活操作,使用的具体步骤如下所述。(1)使用Thread的构造函数创建一个线程的实例,它的参数里面需要给出线程运行的函数方法。原创 2024-04-24 18:34:18 · 569 阅读 · 0 评论 -
Unity 3D脚本编程与游戏开发【5.7】
有趣的是,通过这种⽅式定义的事件,可以在Unity编辑器⾯板上进⾏编辑,很像按钮等UI组件的编辑⽅式,如图13-8所⽰。例如,常⽤编程语⾔Lua和Python,都把函数看作“第⼀类对象”,让函数对象与普通对象有着平起平坐的地位,函数可以被变量引⽤,也可以被装到容器中,还可以被当作变量传递。代码演⽰的结果很简单,只要调⽤事件的Invoke,那么调⽤之前通过AddEventListener订阅的函数都会被调⽤,也包括匿名函数。⽽更神奇的是,函数类型的变量能同时指向多个函数,调⽤它就能依次调⽤多个函数。原创 2024-04-14 20:36:18 · 642 阅读 · 0 评论 -
Unity 3D脚本编程与游戏开发【5.6】
以上代码最⼤的改变在于,Update每帧都调⽤协程函数,⽽协程函数⾃⾝会⽤循环控制运⾏的进度,如果时间不到就⽴即中断,最终实现了定时运⾏的效果。敌⼈AI与主⾓⾏动本应是不相关的两个模块,⼀⽅⾯不应该把敌⼈AI的代码插⼊主⾓⾏动的函数中,另⼀⽅⾯敌⼈AI⼜确实需要在主⾓⾏动的时刻⽴即做出反应。之后每⼀帧Update执⾏时,都要检查当前是否过了helloTime所设定的时间,如果设定的时间已过,则执⾏⼀次迭代器函数,并且将中断返回值作为下⼀次延时的秒数。回到上⽂的跳跃代码,跳跃逻辑遇到的问题也是⼀样的。原创 2024-04-14 20:25:37 · 579 阅读 · 0 评论 -
Unity 3D脚本编程与游戏开发【5.5】
也就是说,保存在池⼦中的物体都在m_Pool容器中,⽽离开对象池的物体要从m_Pool包含的队列中删除,并在m_OutObjs容器中做好记录,以便归还时使⽤。⽽协程函数则可以在yield处中断,下⼀次调⽤时可以接着上次中断的地⽅继续执⾏,⽽且所有的局部变量都不会重置,会保存上⼀次中断时的状态。⼀旦⼀个函数发⽣死循环,就会阻碍整个游戏的运⾏。但由于物体本⾝的渲染和脚本依然存在,计算和渲染的压⼒依然也存在,因此使⽤对象池并⾮是⼀劳永逸的优化⽅法,开发者还是要根据实际情况,组合使⽤各种各样的优化技巧。原创 2024-04-14 20:13:02 · 605 阅读 · 0 评论 -
Unity 3D脚本编程与游戏开发【5.4】
要想显⽰视野范围,还需要给敌⼈⾓⾊添加⼀个⼦物体,命名为ViewIndicator,给⼦物体添加Mesh Filter组件和Mesh Renderer组件,并挂载⼀个半透明材质球,如图12-14所⽰。总之,只要善于利⽤已经做好的主⾓和敌⼈⾓⾊,再加上巧妙摆放的场景素材,就可以做出很棒的关卡,⽽且在实践中也可以进⼀步。对每个场景,可以设定⼀个任务⽬标。⽽创建和销毁物体本⾝属于⽐较消耗资源的操作,创建时不仅需要引擎的处理,⽽且还会分配⼤量内存,这些内存在物体销毁时还需要回收,这给虚拟机带来了垃圾回收的压⼒。原创 2024-04-14 15:42:19 · 697 阅读 · 0 评论 -
Unity 3D脚本编程与游戏开发【5.3】
在此游戏中,敌⼈⾓⾊的外观和动画⼏乎与主⾓⼀样。读懂代码细节的技巧实际的代码中充满了各种各样的细节,只有对游戏⾮常熟悉,才可能判断出⼀段代码对应游戏中的哪种情况。⾸先搭建脚本框架,由于前⽂已经完成了主⾓的所有功能,因此类似的部分可以参考之前的代码,其具体代码如下。上述代码中有各种特殊情况的处理,仅靠阅读代码是⽆法理解的,因此必须通过多次测试才能判断⼀段代码对应游戏中的哪种情况。其次,通过导航代理让敌⼈⾓⾊在路径点之间循环移动,每到达⼀个点,就⾛向下⼀个点,到达最后⼀个点时回到第⼀个点。原创 2024-04-14 15:21:43 · 951 阅读 · 0 评论 -
Unity 3D脚本编程与游戏开发【5.2】
Throwing脚本⽐想象中复杂得多,原因是投掷物⻜⾏时不⽤刚体实现,⽽是完全受脚本控制,这样做的好处是逻辑可控、不易出现bug,⽽且曲线优美。在PlayerInput脚本的Update()⽅法中,UpdateMove⽅法被调⽤之后,添加UpdateAction的调⽤。⼦弹是⼀个简单的预制体,需添加勾选了Is Kinematic的Rigidbody组件和Box Collider组件(碰撞体设置为触发器),它受Bullet脚本控制。投出投掷物代码的写法与发射⼦弹代码的写法是类似的。以下是实现射击的函数。原创 2024-04-14 14:57:57 · 395 阅读 · 0 评论 -
Unity 3D脚本编程与游戏开发【5.1】
在PlayerChracter脚本中可以看到,有⼀个⽤途不明的字符串变量叫作curItem,它代表的是玩家⾓⾊当前持有的武器或道具,如果不持有武器或道具则为none。具体路径较⻓,读者应从⾻骼根节点出发,依次找到⾓⾊的躯⼲、胸部、右肩、右臂和右⼿,然后在右⼿下⾯创建空物体WeaponSlot,将空物体位置旋转归0,如图12-9所⽰。其中Weapons层是为了举枪动作、射击动作等⽽创建的,它具有动画遮罩(仅影响上半⾝动作)的功能,可以单击Weapons层的设置按钮查看或修改动画遮罩,如图12-6所⽰。原创 2024-04-14 14:49:51 · 710 阅读 · 0 评论