![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity
文章平均质量分 77
七七喝椰奶
基本功决定高度
展开
-
Unity优化——加速物理引擎1
大家好,这里是七七,今天开始更新物理引擎相关的优化部分了,本文介绍的是。Unity技术有两种不同的物理引擎:用于3D物理的Nvidia的PhysX和用于2D物理的开源项目Box2D。然而,Unity对它们的实现是高度抽象的,从通过主Unity引擎配置的更高级别Unity API的角度来看,两个物理引擎解决方案以功能相同的方式运行。无论是哪种情况,对Unity的物理引擎了解的越多,就越能理解可能的性能增强。本文将介绍一些关于Unity如何实现这些系统的理论。原创 2023-12-11 15:31:58 · 1439 阅读 · 0 评论 -
Unity优化——批处理的优势
在3D图形和游戏中,批处理是一个非常通用的术语,它描述了将大量任意数据块组合在一起并将它们作为单个大数据块进行处理的过程。这对于CPU,特别是GPU来说是理想的,因为它可以使用多个内核同时粗粝多个任务。在内存中不同位置来回切换内核是需要时间的,因此切换内核所花的时间越少越好。在某些情况下,批处理的对象指的是网格、顶点、边、UV坐标和其他用于描述3D对象的不同数据类型的大集合。然而,该术语也可以简单代表批处理音频文件、精灵、纹理文件和其他大数据集的行为。原创 2023-12-08 11:06:25 · 1289 阅读 · 0 评论 -
Unity优化——脚本优化策略4
在前面我们讨论了使用这些Unity Engine特性来避免在大多数帧中出现过多CPU工作负载的优缺点。不管采用哪种方法,都存在一个额外的风险,即需要编写大量的MonoBehaviour来定期调用某个函数,这意味着在同一帧中同时触发了太多的方法。想象一下,成千上万的MonoBehaviour在场景开始时一起初始化,每个MonoBehaviour同时启动一个协程,每500毫秒处理一次AI任务。原创 2023-11-29 12:14:05 · 1151 阅读 · 1 评论 -
Unity优化——脚本优化策略3
大家好,这里是七七,今天又来更新Unity脚本优化篇了,话不多说,直接上主题。原创 2023-11-27 10:07:24 · 1232 阅读 · 0 评论 -
Unity优化——脚本优化策略2
大家好,这里是七七,今天继续来介绍几个Unity脚本优化策略。原创 2023-11-25 18:35:59 · 1166 阅读 · 0 评论 -
Unity优化——脚本优化策略1
Unity中编写脚本的主要意义是在从MonoBehaviour继承的类中编写回调函数,Unity会在必要时调用它们。最常用的4个回调是Awake()、Start()、Update()和FixedUpdate()。在第一次创建MonoBehaviour时调用Awake()。Start()在Awake()之后不久,但在第一个Update()之前调用。在场景初始化期间,每个MonoBehaviour组件的Awake()回调在Start()回调之前调用。原创 2023-11-24 10:46:09 · 1105 阅读 · 0 评论 -
UnityAI——常用感知类型的实现
要实现视觉感知,要为感兴趣的、能被看到的那些游戏对象加上一个视觉触发器,视觉触发器类是Trigger的派生类,对于AI角色能看到并需要做出相应的每个游戏对象,都需要添加它,例如玩家、宝物、可以捡起的武器等。为了让角色具有记忆,实现了一个SenseMemory类,这个类具有一个记忆列表,列表中保存了每个最近感知到的对象、感知类型、最后感知到该对象的时间以及还能在记忆中保留的时间,以及何时删除记忆对象。一个近距离,大锥角的圆锥可以模拟出视觉中的余光,而近距离的视觉通常用更长、更窄的圆锥体来表示。原创 2023-11-22 14:48:28 · 144 阅读 · 1 评论 -
UnityAI——排队过窄洞
大家好,这里是七七。本文想要会用只看本文即可,若想要彻底理解加以从本系列的前些文章开始看今天要为大家介绍的例子是Unity中的排队过洞AI,为了让人群有序地通过窄洞,而不是挤在一起,我们需要用到两种操控性为,分别是和话不多说,先看效果排队过窄洞下面为大家介绍集体步骤。原创 2023-11-14 14:51:01 · 1017 阅读 · 0 评论 -
UnityAI——动物迁徙中的跟随实现实例
大家好,我是七七,今天来给大家介绍的是Unity中用跟随领队行为。看本文若是想了解和实现,只看本文即可,若是想彻底弄透,建议从七七的专栏开始看。废话不多说,先上视频:我们的目标是让后面的人跟着领头的人,并遵循一些规则对于跟随的人;我们只需要实现这些规则,就可以得到理想的效果,这与神经网络的思想类似,下面我们就来实现这些规则。原创 2023-11-10 12:51:18 · 4417 阅读 · 0 评论 -
群体的操控行为
组行为的复杂性来源于个体间的交互,并遵守一些简单的规则。模仿群体行为需要下面几种操控行为。原创 2023-11-09 14:48:29 · 434 阅读 · 0 评论 -
UnityAI——个体AI角色的操控行为脚本
注:本文用到了前文所用的基类在一些游戏中,可能会遇到想让AI角色追逐或者避开玩家的情况。如在飞机模拟游戏中,让导弹跟踪和进攻玩家或玩家的飞行器。这种情况下,可以运用本节介绍的技术。原创 2023-11-03 14:11:01 · 627 阅读 · 0 评论 -
UnityAI——操控行为编程的主要基类
本文内容位于AI模型中的运动层。变成种主要涉及到Vehicle、AILocomotion和Steering类,它们是实现操控行为的基础。原创 2023-10-30 22:27:03 · 263 阅读 · 0 评论 -
Unity——游戏AI实例
状态机的原理比较复杂,但只需要用一个switch-case语句就能实现,或者用if语句编写也可以。之后只要把设计思路按部就班地编写成程序代码即可。接下来用最简单的方式实现敌人的AI状态机。首先,定义敌人的3个状态——待机、进攻和返回。然后将Update函数改为状态机的模式,直接用switch-case语句实现。已经实现了敌人视野探测功能,本文来完善敌人AI。注意:若要阅读此文,务必在阅读完。Unity——模拟AI视觉。原创 2023-09-14 10:30:13 · 423 阅读 · 0 评论 -
有限状态机的概念
有限状态机简称状态机,是表示有限个状态,以及在状态之间的转移和动作等行为的数学模型。状态机的要素有和两个。在Unity中,动画状态机最重要的属性就是节点和连线,其中每个节点都是一个动画片段(或动画融合树),而没跟连线代表着可以从一个状态转移到另一个状态。对动画来说,动画状态的转移是有条件的,一般是通过设定动画变量,使得动画播放完毕时能够跳转到另一个动画状态。其他编程逻辑也是一样,总要设计出一些必要的状态,并定义状态之间的转移条件,才能把一个复杂的逻辑描述清楚。原创 2023-09-09 13:53:48 · 539 阅读 · 0 评论 -
Unity——导航系统补充说明
我们可以通过设置动画状态机的变量,让动画匹配由玩家直接控制的角色的移动。那么自动导航的角色如何与动画系统结合呢?有两个常用的属性可以获得导航代理当前的状态:一是,类型为Vector3,指的是导航代理当前速度向量,可以用速度的方向和大小来匹配移动动画。二是,类型为bool,可以根据角色是否处于导航链接路径上,判断是否需要播放跳跃动画。原创 2023-09-08 17:23:47 · 452 阅读 · 0 评论 -
Unity——脚本与导航系统
Unity内置了一个比较完善的导航系统,一般称为Nav Mesh(导航网格),用它可以满足大多数游戏中角色自动导航的需求。原创 2023-09-07 23:08:57 · 1458 阅读 · 0 评论 -
游戏AI综述
随着深度学习等技术的突破性进展,现代的人工智能技术进步神速,已经在自然语言处理、机器翻译和图像识别等众多方面取得了进步,而且已经影响到了现实生活。如果把围棋也看作游戏,那么大名鼎鼎的AlphaGo系列人工智能,已经体现了人工智能在为围棋项目中的较高水平。另外,也有一些人工智能再经济类电子游戏中取得了良好的成绩。从概念上讲,游戏AI指的并不是此类AI。电子游戏在早期就开始包含了计算机控制的敌方角色,但设计精妙的游戏AI再电子游戏早期历史中比较少见。其中一个受到广泛欢迎的作品是著名的《吃豆人》。原创 2023-09-06 19:12:13 · 305 阅读 · 0 评论 -
Unity——JSON的读取
在实际中,读取JSON比保存JSON重要得多。因为存档、发送数据包往往可以采用其他序列化方法,但游戏的配置文件使用JSON格式比较常见。游戏的配置数据不属于动态数据,属于游戏资源,但很适合用JSON表示。下面以一个简单的JSON数据文件为例,演示读取JSON。从整体上看有两种思路。原创 2023-09-05 17:33:07 · 2322 阅读 · 2 评论 -
Unity——LitJSON的安装
LitJSON是一个轻量级的C# JSON库,用于在Unity游戏开发中进行JSON数据的序列化和反序列化操作。它提供了简单而高效的接口,帮助开发者处理JSON数据。以下是LitJSON库的一些主要特点和功能:1. 高性能:LitJSON使用高效的序列化和反序列化算法,能够在处理大量JSON数据时保持良好的性能。2. 简单易用的API:LitJSON提供了简单直观的API,使开发者能够轻松地将JSON数据转换为对象,或者将对象序列化为JSON格式。原创 2023-09-05 16:07:58 · 4296 阅读 · 0 评论 -
Unity——脚本与序列化
自定义二进制序列化是一种在代码级别定义对象如何转换为二进制数据的过程,以及如何将二进制数据转换回对象。在Unity中,通过自定义二进制序列化,我们可以完全控制对象的序列化和反序列化过程,以适应特定的需求。// ...// 将字段写入二进制流中// ...// 从二进制流中读取字段// ...// 设置对象的值...// 将二进制数据存储到磁盘或发送给其他系统...// 使用反序列化后的对象...原创 2023-09-02 18:42:26 · 1311 阅读 · 0 评论 -
Unity——热更新浅析
热更新的思想从本质上来讲,要考虑一些问题。例如,一个完整的游戏最多可以有多大比例的资源通过网络加载?能否让尽可能多的资源通过网络加载?通过网络加载有很多好处,不仅可以极大减小安装包的体积,而且有助于游戏的推广传播。更重要的是,以后游戏更新都不需要重新安装,只要有网络,打开游戏后自动加载新版本的资源就可以了。那么哪些资源需要通过网络加载呢?首先,理论上几乎全部资源都可以通过网络加载;其次,。针对这两点,前辈们想出了各种解决方案。原创 2023-08-31 11:51:54 · 416 阅读 · 0 评论 -
Unity——协程(Coroutine)
本文为问GPT所得。原创 2023-08-30 21:46:45 · 4734 阅读 · 0 评论 -
Unity——资产包(Asset Bundles)
在上面加载资产包的例子中,用到了AssetBundle.LoadFromFile()方法,它是一种常用的从本地文件加载资产包的方法。打包后在资源管理器的工程文件夹中找到AssetBundles文件夹(在Assets文件夹外面),可以看到有两个无扩展名的文件,其中ab就是指定的资产包,而ab.mainfest则是资产的相关信息。Unity默认将资产包的根目录放在Assets文件之外,侧面说明资产包已经可以独立存在,不再像普通资源那样需要被引擎管理,而可以将它放在硬盘中的任意位置。原创 2023-08-30 20:18:56 · 2347 阅读 · 0 评论 -
Unity——工程与资源
区别在于,Asset是在编辑器中管理和引用的资源,而Resource是在运行时动态加载的资源。Unity采用的方案明显是第二种,它会对Assets文件夹下的所有文件生成一个名称相同,扩展名为meta的文件,包括文件夹也会生成对应的META文件。但问题是,如果脚本中有一个变量正在引用着某个资源,或是场景中某个忘记销毁的物体饮用者某个资源,则该资源会印在使用中而不会被自动卸载。一般简单的方法时使用公开变量加拖曳的方法引用资源,实际上动态加载资源的方法适用范围更广,也方便在运行时切换不同的资源。原创 2023-08-29 21:17:20 · 2441 阅读 · 0 评论 -
Unity——音频管理器(附例子)
音频管理器有很多设计思路,其中一种比较简洁的思路是,事先指定游戏中最多同时播放多少个音频,然后创建若干个音源。例如,最多播放8个音频,那么就创建8个Audio Source组件,这8个组件可以看作8个频道。实际上,根据游戏类型的不同,音频管理器的创建思路也有区别。如果音效已经引起了代码的混乱和性能问题,就有必要统一管理所有的音源和音效,也就是设计一个易用的音频管理器。有了音频管理器,所有的Audio Source组件都会统一创建,而所有音效播放的需求都要通过调用音频管理器的方法简介实现。原创 2023-08-28 21:47:21 · 1431 阅读 · 0 评论 -
Unity——音乐、音效
换句话说,如果有10个音效同时播放,就需要10个音源。因此一般游戏中的每个角色身上都带有一个Audio Source组件,如敌人会叫喊,主角会挥动武器,那么就在每个敌人和主角身上都挂一个Audio Source组件。如果主角的武器音效、跳跃音效和受伤音效可能会同时播放,那么可以在主角身上挂3个Audio Source组件,分别对应一种音效(当然,也可以把Audio Source组件放在其他物体上)。而且根据游戏逻辑,同样的动作有时需要配合音效,又是不需要,那么弄清楚播放音效的条件也很重要。原创 2023-08-28 18:02:40 · 2332 阅读 · 0 评论 -
Unity音频基础概念
游戏画面能够被观众看到,是因为有渲染器和摄像机,同样音频能够被听到,也要有声音的发出者与声音的接收者。声音的发出者叫做音源,接收者叫做音频侦听器。Audio Source与Audio Listener都是组件,可以挂载到任意物体上发挥作用。一般音频侦听器整个场景中只有一个Audio Listener,默认挂载在著摄像机上。根据具体设计需求,Audio Listener也可以挂载到主角身上,或其他适合接收音频的位置。原创 2023-08-27 22:07:15 · 748 阅读 · 0 评论 -
Unity——后期处理举例
它是一种用于实现特定的后期处理效果的方式。通过使用 Post Process Layer,开发者可以根据需要为不同的场景或相机应用不同的后期处理效果,实现更加个性化和精细的视觉效果。在任意物体下新建组件,搜索“post”,如果看到Post-process Debug等三个后期处理相关的组件,就说明已经安装了扩展包。选择Window->Package Manager,打开Package Manager窗口,等待加载完毕后,可以看到大量的扩展包,也可以Update(更新)或Install(安装)该扩展包。原创 2023-08-26 20:44:33 · 1608 阅读 · 0 评论 -
Unity——拖尾特效
要让拖尾达到较好的效果,就要对拖尾的长度(停留时间)、宽度、材质和颜色渐变等参数进行细致调节。在较老的Unity版本中,拖尾效果需要用插件实现。现在Unity已经内置了Trail Renderer(拖尾渲染器)组件,可以方便地制作出拖尾效果。将拖尾设置完成之后,会在物体运动时自动出现,不需要额外设置。脚本主要是开启或关闭拖尾,以及改变拖尾的时间、材质等,示例如下。摄像机通过调整快门时间,也可以拍出具有拖尾效果的照片,如在城市的夜景中,汽车的尾灯拖曳出红色的线条。拖尾渲染器组件的使用比较简单,其步骤如下。原创 2023-08-25 20:15:40 · 4176 阅读 · 0 评论 -
Unity——DOTween插件使用方法简介
例子演示:DOTween移动缓动动画既是一种编程技术,也是一种动画的设计思路。从设计角度来看,可以有以下描述采用上述思路,可以封装出易用的缓动动画库。例如DOTween就是一种常用的缓动动画插件。原创 2023-08-23 15:20:14 · 3135 阅读 · 0 评论 -
Unity——动效与缓动动画
例如,移动的起点和终点不确定、移动的速度不确定、显示的文字内容不确定等,都无法套用事先做好的动画;游戏体验是综合性的,音效、剧情、界面设计、美术风格和玩法内涵都是游戏体验的组成部分。这些细节包括跳跃的图标、闪烁的文字、流畅滑动的通讯录等,可以统称为动态效果或动效。再入,iPhone在智能手机中更受消费者喜爱,在很大程度上要归功于其操作体验,而操作体验很大程度上来自当时处于行业领先水平的界面动态效果。动效在游戏中非常重要,特别是在一些休闲类游戏中有着举足轻重的地位,但制作动效本身是比较繁琐的。原创 2023-08-22 18:09:24 · 1288 阅读 · 0 评论 -
Unity——各种特效的基本使用方法
特效是游戏制作不可或缺的一环,作为游戏开发者最重要的工作就是将特效添加到游戏中,并在合适的时机、合适的位置将特效播放出来,同时还要注意特效的管理和销毁。某些种类的特效,如动效、贴花,还要编写脚本代码以实现更细节的控制。因此本文将简单介绍各种特效的使用方法。特效和动画的播放本身没有什么难点,很多时候只需要实例化物体即可。原创 2023-08-21 23:16:32 · 3859 阅读 · 0 评论 -
Unity特效总览
Unity中的粒子组件叫做Particle System。粒子系统顾名思义,与“微粒”有关。粒子系统会生成和发射很多粒子,通过控制粒子的生成数量、大小、角度、速度、贴图和颜色等众多属性,可以实现或真实或炫酷的各种效果。其中,粒子的每一种属性还可以根据时间变化而随机变化,充分释放特效设计师的创造力。例如,用粒子系统可以实现火焰、雨、雪、气流等自然现象,也可以实现能量球、魔法弹等幻想中的效果。而且现代的粒子系统也支持基于3D模型的粒子,可以实现模型破碎、模型聚合、模型消散等丰富的视觉效果。原创 2023-08-12 18:40:27 · 1043 阅读 · 0 评论 -
unity小游戏——得分高低的判定
大部分游戏都鼓励玩家不断挑战更高的得分。虽然也有像角色扮演(RPG)这类更主张情节而不关注得分的游戏。但现在的游戏正变得越来越多。这次我们介绍的是一个斩杀怪物的游戏。成功斩杀怪物后,怪物出现的数量会越来越多。玩家要尽可能地持续斩杀怪物,这样才能在游戏结束之前杀掉大量的怪物。反之,玩家一旦失守,怪物的数量就会减少。当然,我们可以直接把倒下的怪物数量作为玩家的得分,但这里我们可以小小地改进一下,让游戏更有趣。假若武士在追赶怪物的过程中一直不攻击,最终将撞上怪物。在接近怪物的过程中,如果太近的话就会失手。原创 2023-07-23 14:55:16 · 335 阅读 · 0 评论 -
Unity小游戏——怪物出现模式的管理
游戏启动后不久,画面前方将出现怪物,游戏的目标是不停地看到怪物并持续前进。原创 2023-07-21 13:57:18 · 340 阅读 · 0 评论 -
Unity小游戏——无限滚动的背景的改良
在上文介绍的算法中,背景只在每次调用Update()时移动一次。这样一来,如果武士移动的距离很长,即速度很快,就可能出现背景和角色移动不协调的情况.虽然我们这个游戏中不会打到那样快的移动速度,但是有些游戏中出现过玩家校色移动,或者在场景中移动到错误位置的现象。下面就让我们来考虑一下这种情况的解决办法。原创 2023-07-19 23:21:11 · 569 阅读 · 0 评论 -
Unity小游戏——武士击杀小怪兽(无限滚动的背景)
武士能够自动行走点击攻击键攻击怪物一次性斩杀多个怪物近处斩杀怪物将得到高分如果不出现失误,怪物的数量将会增加碰到怪物后将失败。原创 2023-07-19 16:43:28 · 627 阅读 · 0 评论 -
Unity 动画系统基本概念
在古代,一幅字画叫一帧,而在计算机中,每次渲染完毕一幅画面并显示出来,这一幅画就是一帧。连续切换的帧就形成了动态的画面。每秒刷新帧的次数称为频率,单位是FPS(Frames Per Second,帧/秒),也可以简称为"帧"。传统电影每秒显示24帧就可以保证良好的动态效果。由于游戏与电影显示原理的不同,游戏至少需要30帧才能感到流畅,而要保证良好的视觉体验则最好是60帧。在电子竞技领域中,也会追求更高的帧率,以获得比赛中的优势。我们普遍希望帧率尽可能稳定,但在游戏运行过程中,设备不一定能维持稳定的帧率。原创 2023-05-28 11:45:34 · 1840 阅读 · 10 评论 -
Unity 四元数
在场景中新建一个Cube用鼠标在Inspector窗口中朝向的x、y、z这三个字母上拖拽,不要在场景中用鼠标直接旋转物体,这样可以看到3个轴分别是如何旋转的将x的旋转改为90,y和z的旋转改为0用鼠标在旋转的y和z上拖拽,修改y和z的旋转。这是会发现,绕y和绕z旋转方向变成一样了,缺少了一个自由度按照上述步骤操作,会顺利进入"万向节锁定"状态。一旦进入此状态,物体旋转就会受限制。原创 2023-05-15 21:50:28 · 1360 阅读 · 0 评论 -
Unity 矩阵简介
由于矩阵算法的问题涉及面很广,本文只展示单独的平移、旋转和缩放矩阵,让小伙伴们对矩阵有一个直观的认识,消除陌生感。原创 2023-05-14 22:33:31 · 1117 阅读 · 4 评论