![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Unity
文章平均质量分 95
介绍具体的Unity开发案例
心之凌儿
写代码是专业的
展开
-
Unity编辑器扩展: 程序化打图集工具
关于编辑器扩展相关的知识,在前面的两篇内容中做了详细的描述,链接地址:Unity编辑器扩展 UI控件篇Unity编辑扩展:功能篇之Json数据编辑器前两篇着重于介绍编辑器界面扩展相关控件接口的使用方式。作为系列文章的第三篇,会更偏重于引擎内编辑器扩展承担 的提升开发效率的功能模块设计通过程序化打图集减少工作量的同时可以稳定全局的管理图集,避免随着项目膨胀手动管理产生资源上的混乱。程序化图集打包UI界面引用图集检测工具图集资源自动/手动加载、卸载框架支持。原创 2022-09-07 06:00:00 · 2251 阅读 · 1 评论 -
Unity编辑扩展:功能篇之Json数据编辑器
编辑器扩展算是比较纯粹的功能开发,基本没有什么理论知识,都是一些Unity相关接口的使用与数据类型的设计操作等。在本篇文章主要的文字描述基本都是在做代码解释,为了使内容接受度更高,我会尽量描述到代码结构中的每个细节。如果有对此不太了解又很感兴趣的小伙伴可以尝试手动过一遍代码,相信很快很快就可以掌握编辑器开发方面的使用技巧在前篇文章中有对编辑器扩展UI控件方面的一些基础内容做了简单的描述,大概说明了UnityUnity编辑器扩展 UI控件篇。原创 2022-08-24 16:47:15 · 2815 阅读 · 0 评论 -
Unity编辑器扩展 UI控件篇
Unity引擎内编辑器扩展原创 2022-07-02 15:32:47 · 3637 阅读 · 0 评论 -
Unity 透视投影矩阵变换的可视化
前言在前面的文章中描述了关于Unity中空间矩阵的转换,相机投影矩阵的意义与正交相机不同,投影相机为了得到近大远小的画面,会根据深度信息做平切面的画面缩放,而这些平切面连续组合起来就组成了相机的视锥空间......原创 2022-04-19 06:00:00 · 5293 阅读 · 1 评论 -
Unity 与 UE4 双引擎版本四叉树的创建与可视化
Unity与UE4双引擎时代已经到来了原创 2022-02-08 15:48:06 · 3374 阅读 · 1 评论 -
Unity 不同空间坐标转换中的矩阵应用
前言实际开发中,Unity已经为开发者封装好一些坐标转换的方法,使用起来是比较方便的,但是对于理解而言就比较复杂了,本篇文章通过模拟的方式来简单的了解一下Unity的矩阵坐标变换的思路获取物体的相对坐标在开始前先做一些准备工作,创建两个空物体分别命名为centerPos与targetPos,接下来所执行的操作就可以理解为求targetPos相对于centerPos的本地坐标系下的坐标,即此时centerPos为坐标原点,来求出targetPos在该坐标系下的坐标位置为了便于观察,通过Gizmos绘制原创 2022-01-05 06:00:00 · 5924 阅读 · 3 评论 -
Unity 贴花效果的实现
前言通过Unity实现贴画效果的方式多种多样,这里介绍一种有官方现成代码的方式,在默写场景下很好用大概实现方式介绍简单的来说就是通过发射一条射线与物体发生碰撞来获取物体的基本的信息,然后提取出碰撞处该物体的UV坐标点,然后进行一个计算得到物体对应贴图的像素信息,然后对这些像素进行一个颜色的替换,最后就可以得到一张贴花效果的贴图这种方式的第一步就是需要通过发射一条射线,然后得到碰撞检测点的信息,这里用到的API为:由于其返回的是一个UV坐标点,我们没有办法直接的去使用,所以需要通过一个坐标的转换,原创 2021-11-22 12:35:06 · 5326 阅读 · 1 评论 -
Unity 动态网格地图的生成:基于Perlin Noise创建地形
前言:在前面的文章中,设计了一个简单的网格地图生成脚本,但是本身是基于二维坐标来完成的,为了更好的拓展该脚本,同时学习大世界地图加载方案,本文章来做一个三维地图创建加载脚本一、创建三维地图这一步很简单,只需要在本来的脚本上进行Y轴的扩展,这样就可以生成三维的地图,简单的从第一步开始,需要了解一下using System.Collections;using System.Collections.Generic;using UnityEngine;using System;public cl原创 2021-10-02 17:51:57 · 7980 阅读 · 4 评论 -
Unity 性能优化:资源篇
Unity性能优化大的方面来说,通过Unity对于项目的性能优化大概可以分为下面几个部分:分类资源渲染程序项目配置一、资源1、纹理(简单来说就是图片)纹理的资源优化主要集中于下面的几点:纹理大小压缩格式导入设置通常,在游戏运行时,大部分内存都是用在了纹理上,因此你的导入设置非常关键,我们可以在Inspector面板看到图片资源的信息,类似于下面这张图:从性能优化的角度看,纹理道路需要遵循如下的原则:降低最大分辨率采用二次幂压缩格式:制作纹理图集取消勾选Read原创 2021-09-05 21:11:21 · 3440 阅读 · 7 评论 -
基于Unity的A星寻路算法(绝对简单完整版本)
前言在上一篇文章,介绍了网格地图的实现方式,基于该文章,我们来实现一个A星寻路的算法,最终实现的效果为:项目源码已上传Github:AStarNavigate在阅读本篇文章,如果你对于里面提到的一些关于网格地图的创建方式的一些地图不了解的话,可以先阅读了解一下下面的这篇文章:文章链接:Unity 制作一个网格地图生成组件1、简单做一些背景介绍在介绍A星寻路算法前,先介绍另外一种算法:Dijkstra寻路算法,简单的来说是一种A星寻路的基础版。Dijkstra作为一种无启发的寻路算法,原创 2021-08-12 14:34:16 · 6455 阅读 · 8 评论 -
Unity 制作一个网格地图生成组件
前言如果你玩过三国志这种类型的战旗游戏或者模拟城市、部落冲突、海岛奇兵这种模拟经营类的游戏,那么你对网格地图一定不会陌生。在这些游戏中,所有地图场景中的物体都是基于整齐的网格来记录位置等信息。如果你还是感知不到什么是网格地图。俄罗斯方块或者贪吃蛇你一定不会陌生,物体的存在是依托于规整的网格地图而存在的。如果你是小萌新,并且对网格地图感兴趣的话,可以学习本片文章,然后尝试创建自己的游戏吧创建组建出网格的基本单元我们知道网格是由一个个格子组成的,所以第一步需要先创建出一个基本的模板:创建一个脚本命名原创 2021-08-02 15:12:37 · 7518 阅读 · 15 评论 -
Unity 协程(Coroutine)原理与用法详解
前言:协程在Unity中是一个很重要的概念,我们知道,在使用Unity进行游戏开发时,一般不考虑多线程,那么如果处理一些并发的需求呢,Unity给我们提供了协程这种方式为啥在Unity中不考虑多线程因为在Unity中,只能在主线程中获取物体的组件、方法关于协程1,什么是协程协程,从字面意义上理解就是协助程序的意思,我们在主任务进行的同时,需要一些分支任务配合工作来达到最终的效果,这就是协程的概念:举个例子,在场景加载的时候,如果你的场景很复杂,那么加载过程就有可能使得画面卡顿,我们不原创 2021-04-29 16:22:11 · 57507 阅读 · 27 评论 -
Unity 有限状态机(FSM)的框架结构
前言NPC是游戏中很重要的一部分,功能复杂,行为智能的NPC可以给玩家带来更加优秀的游戏体验,我们可以通过对NPC的行为模式的设计来理解有限状态机而对于游戏开发者而言,要实现一个功能完备,逻辑清晰的AI状态图可不是一件简单的事情,如果没有前期的完备的设计,以及正确的编程方法,会在开发过程中产生很多难以解决的问题下面看一个案例:在游戏开发过程中,你想要实现一个NPC的一些功能,比如静止与攻击,当玩家靠近NPC,NPC就会攻击玩家,编写一段逻辑代码来实现这样的一个效果:if(玩家靠近) NPC攻原创 2021-04-24 11:19:03 · 5359 阅读 · 3 评论 -
Unity 渲染流水线:CPU与GPU合作创造的艺术
整体来讲应用程序阶段:由CPU来处理,首先获取场景中的模型信息,根据一定规则(视锥剔除、遮罩剔除)剔除那些不需要渲染的物体,然后将需要渲染的模型的顶点数据以及渲染模式,光照信息等等发给GPU,这些信息被成为Draw Call ,一般来说一个独立的模型会产生一个Draw Call,但是如果经过一些特殊的处理,比如所动态合批,静态合批等等操作,就会降低Draw Call几何阶段光栅化阶段...原创 2021-04-16 22:39:08 · 1466 阅读 · 0 评论 -
Unity 资源加载的两种方式:Resources和AssetBundle最详细的解析
前言:在游戏开发学习初期,游戏体量较小,如果游戏场景需要Asset中的资源,我们可能会通过拖动的方式,将其添加到游戏场景中。而到了实际工作中,会发现再这样做就会使得各种拖动的资源非常复杂,难以查找与维护关于资源:在Unity中,在Asset文件下的文件都可以称为游戏的资源,例如预制体、模型、材质、纹理、音频、视频、数据文档、场景等等为了避免这样的情况,Unity游戏引擎为我们提供了很多种加载Asset中资源的方式,而我们最常用的主要是Resources和AssetBundle两种方式资源加原创 2021-04-03 21:01:03 · 25217 阅读 · 1 评论 -
Unity 升级项目到Urp(通用渲染管线)以及画面后处理
前言:Urp是一种SRP(可编程渲染管线),相比于默认渲染管线,在提升画面表现的同时,也可以提升游戏的性能表现开始升级前准备在开始之前,需要你备份你的项目,确保在升级过程中出现问题还有挽回的空间关于项目的备份:可以打包成Package来导出项目在你做好备份后,就可以正式开始项目的升级工作,我们可以在导航栏中的Window选项中找到Package Manager,点击进去,找到Universal RP,然后点击安装即可完成安装将默认渲染管线替换为Urp渲染管线导入Urp插件后,在Pr原创 2021-03-30 15:24:37 · 49547 阅读 · 12 评论 -
Unity 帧动画
前言动画在游戏中是很重要的一环,通过动画,可以体现出当前角色的行为状态,带给玩家更加丰富的游戏体验Unity中的动画具体有三种:骨骼动画:3D角色物体最常用的动画关节动画:序列帧动画:制作流程:首先需要导入素材,即一组图片:可以将其理解为一组幻灯片,通过快速的播放这些图片,来获取一个动画,在完成图片的导入后,需要调整其Texture Type,使其可以作为帧动画的素材来使用,...原创 2021-03-20 13:36:09 · 6056 阅读 · 2 评论 -
Unity 事件管理器
对于继承于MonoBehaviour的脚本:using System.Collections;using System.Collections.Generic;using UnityEngine;public class MainTest : MonoBehaviour{ //声明单例模式 static MainTest _instance; private void Awake() { if (_instance != null)原创 2021-03-18 15:58:09 · 2277 阅读 · 6 评论 -
Unity 第三人称角色控制器:动画混合树、Cinemachine等功能或插件的使用
前言:无论是RPG、ACT、AVG还是TPS游戏,都有大量的以第三人称为人物视角的游戏作品,尤其时TPS,就是以第三人称为特点而命名的。而对于第三人称而言,人物角色的所有状态全部暴露在玩家的视角之下,关于角色的所有的动画、逻辑、相机表现都要能够让玩家感受到最完美的体验1,角色模型导入:在开始使用Unity设计开发第三人称游戏之前,我们需要先获得合适的角色模型。Unity支持多种格式的模型,而当我们使用具有动画的模型时,往往选择fbx格式的模型选择好模型后,就可以将模型导入到Unity中,然后我们需原创 2021-03-09 11:25:41 · 5127 阅读 · 5 评论 -
Unity 性能优化:降同屏Tris、动态合批降DC、遮罩剔除、渲染路径
前言:元宵节快到了,想要做一个上千盏孔明灯的场景,而当完成后运行,发现场景极其卡顿,尝试减少孔明灯数量,而实际情况并没有改善,于是进行分析,发现GPU性能存在瓶颈问题分析由于场景是用的一套低模的资源包,应该不会出现问题,产生卡顿的原因,猜测是实例化出灯笼的模型出现了问题,首先通过scene窗口看了一下灯笼模型的三角面,确实,是一个高精度模型,三角面密密麻麻:为了验证这样的想法,通过脚本来获取该物体的三角面数,新建一个场景,并在场景中只保留灯笼这一个模型,编写一个脚本获取所有物体的三角面数,并显示在原创 2021-02-23 18:28:59 · 6209 阅读 · 7 评论 -
Unity 背包系统的完整实现(基于MVC框架思想)
前言:背包系统是游戏中非常重要的元素,几乎每一款游戏都有背包系统,我们使用背包系统可以完成装备栏的数据管理,商店物体的数据管理等等一系列的功能本次案例是基于数据本地存储的方式设计的背包系统,首先在数据管理方面,使用ScriptableObject类来实创建数据仓库,可以保存在游戏系统中,重新开始后依旧可以再次加载出来该数据UI端一、UI搭建创建一个Panel作为背包系统中所有物体的父元素,并为其更换一个背景图片,这样可以使得物体有容纳的空间,能够使得物体更加序列化,更规整:接下来需要对Main原创 2021-02-06 20:35:20 · 24908 阅读 · 54 评论 -
Unity Navigation寻路系统并画出指引线
前言寻路系统是游戏中很常用的一个功能,本案例通过Navigation实现寻路系统的同时使用Line Renderer组件标识出指示线,最终完成效果图为:实现过程1,利用Navigation烘培场景为了实现自动寻路的功能,首先需要对场景进行基本的设置,以便让系统识别哪些判断哪些是可运动区域,而哪些又是不可运动区域,Navigation导航系统的判断条件是基于静态物体进行的,如果想对于动态物体进行判断,则需要添加响应的组件。要将物体设为静态,首先在场景中选中静止地面和障碍物,在Unity编辑器Ins原创 2021-02-02 15:37:55 · 4230 阅读 · 7 评论 -
Unity网络编程四:客户端与服务端进行数据传输(Unity登录系统的实现)
前言:我们在完成服务端的搭建与客户端连接客户端的功能后,需要实现两者之间的通信功能C#官方文档给了我们这样一个案例原创 2021-01-29 18:52:35 · 4936 阅读 · 8 评论 -
Unity 场景异步加载(加载界面的实现)
前言:玩游戏最讨厌的是什么呢?当然是游戏加载界面啦但是你知道吗,加载界面在游戏制作中是不可或缺的,它可以使我们的场景完全加载完毕后再进入游戏,确保用户不会出现加载卡顿的情况。如何实现一个简易的加载界面呢?来跟我学习一下吧效果图UI创建:首先创建一个开始界面,为Button按钮添加事件来完成场景的转换:然后创建一个加载界面的UI,首先需要的呢就是一个游戏进度条,可以直接使用Slider来完成创建,其UI层级关系为:其元素作用为:Background:即整个进度条的背景为棕色.原创 2020-12-07 21:45:03 · 19083 阅读 · 12 评论 -
Unity 子弹的射击效果
射击是FPS游戏中最重要的一环,如果实现一个简单的射击效果呢,来跟我一起学习一下吧射击元素:枪口枪口决定了一个子弹初始时的位置和方向,可以使用一个空物体来代替,放置在射出子弹的位置,子弹射击肯定需要子弹才能够完成整个射击的过程,在游戏设置时可以将子弹设为预制体子弹:子弹的几个特殊的地方,首先就是速度比较高,这个时候对于碰撞检测的方式就很重要了,要选择连续动态检测,这样才不会出现正好穿过检测间隔没有触发碰撞检测的情况(也可以使用射线检测)。然后子弹有穿透性,所以要根据实际情况勾选Is.原创 2020-12-01 16:49:34 · 5112 阅读 · 5 评论 -
Unity-创建一个小地图
前言:小地图是一些游戏中必不可缺少的元素,如何使用unity做出一个简单好用的小地图,来看看吧效果展示:本案例的小地图的实现原理是使用Camera生成一张渲染器材质,同时使用UI元素Raw Image来表现出来,完成效果如图:实现:创建一张渲染器纹理什么是渲染器纹理:渲染纹理是特殊的贴图在运行时创建和更新的文件。要使用它们,首先要创建一个新的“渲染纹理”并指定一个摄影机渲染到它在Project面板右键选择Create创建然后选择Render Texture,就可以创建一张渲.原创 2020-11-30 21:21:44 · 1710 阅读 · 2 评论 -
Unity -控制车辆运动效果
前言:无论是专门的赛车游戏、还是像GTA5、绝地求生这样的游戏。都有开车这样的功能,如何做出好的车辆控制手感,让玩家感受开车的乐趣呢,今天就来学习一个最简单的方式吧首先需要设计车辆的控制逻辑,为了更真实的模拟车辆的运动方式,采用速度控制效果。主要的速度参数为: //车辆控制速度参数 private float speedOne = 0f; //车辆实时速度 private float speedMax = 120f; //车辆最大速度 private float sp.原创 2020-11-28 17:52:56 · 10400 阅读 · 0 评论 -
unity控制鸟的飞行模式
前言在很多游戏中都会有控制飞行物的情况,可以通过研究对于鸟的控制来了解一些飞行模式1,如何控制鸟飞行为了尽量模拟鸟的飞行方式,采用下面的控制策略:移动:按住W键控制鸟向前加速到最大速度并保持按住S键控制鸟减速到最小的速度不按住W键和S键则鸟同样缓慢减速转向:Space键控制鸟向下飞Shift键控制鸟向上飞不按Space键和Shift键则鸟上下角度回正A键和D键则控制物体左转和右转2,通过代码来实现相关功能移动的代码实现:首先定义一个float变量speedOne作为控制原创 2020-11-08 20:11:54 · 1716 阅读 · 2 评论 -
unity中Navigation实现自动寻路功能
前言Navigation可以使物体智能的移动到某个位置,这样可以在游戏完成一些NPC的智能路径和主角的寻路功能1,对于场景进行渲染场景的渲染可以告诉角色该走哪里,哪里是障碍物,这样就可以实现对于场景的导航和避免角色撞墙1.1、将场景需要渲染的物体设为静态:首先选中需要渲染的物体,然后在inspector面板中右上角将物体设为静态物体,这样可以对物体进行渲染1.2、打开NaNavigation(导航)渲染面板:在windows中找到AI点击后出现Navigation面板,1.3、在na原创 2020-11-02 19:54:23 · 5264 阅读 · 0 评论 -
unity人物动画配置
前言人物动画的配置是unity重要的一部分,今天来做的是入门级的人物动画配置一、首先导入模型动画1,人物模型导入后,我们会发现里面会有一些动画和人物骨骼:如下图所示:2,点击这个模型,就可以对模型的相关属性在inspector面板进行配置:其中关于动画的是Rig和Animation,对于Rig需要选择的Animation Type,因为我们配置的是人物动画,所以选择的是Humanoid,还有其他的选项可以选择如图:而对于Animation选项的面板的主要功能为:Animatio原创 2020-10-22 17:42:44 · 3960 阅读 · 4 评论 -
Unity中使用OnMouseEnter
前言在unity的MonoBehaviour的生命周期中,有几个可以用鼠标调用的函数:可以直接对于3D场景中的物体进行渲染操作(对于2D物体需要添加Event trigger来使用)一、使用方法在脚本中调用相关函数即可二、使用步骤1.写代码直接使用相关函数完成相关步骤2.效果展示...原创 2020-09-28 21:40:37 · 3972 阅读 · 0 评论 -
unity获取子物体
1,使用GetComponentsInChildren来完成Transform[] tran = gameObject.GetComponentsInChildren<transform>();2,使用Find来完成:transform.Find()3,使用GetChild()transform.GetChild()原创 2020-09-27 20:14:37 · 2868 阅读 · 0 评论 -
unity使用摇杆控制物体移动
文章目录前言一、Scroll Rect是什么?二、虚拟摇杆的建立过程1.创建摇杆UI2,为摇杆添加Scroll Rect2.写代码,来实现摇杆对于物体移动的控制总结前言unity做移动端的开发时,虚拟摇杆的应用很广泛,今天使用Scroll Rect组件来做一个简单易用的摇杆一、Scroll Rect是什么?Scroll RectS是UGUI一个很好用的组件,可以用来做一些可以滚动的窗口,比如王者荣耀英雄选择界面上下翻看的功能。官方对于其定义为当需要在小区域显示占用大量空间的内容时,可以使用Scr原创 2020-09-17 17:33:17 · 4892 阅读 · 1 评论 -
unity 第一人称相机的实现
1,首先创建一个人物,为人物添加角色控制器,可以在其中调节一些参数2,创建一个相机,作为人物的子物体3,为人物添加控制代码3.1首先就是控制人物的行走代码:使用角色控制器中的Move方法来实现控制float _horizontal = Input.GetAxis("Horizontal"); float _vertical = Input.GetAxis("Vertical"); if (player.isGrounded) {原创 2020-09-06 20:36:55 · 5632 阅读 · 1 评论 -
Unity 第三人称人物移动
要实现第三人称的人物移动首先就是需要控制人物的移动:1.创建一个简单的物体当作人物:2,为物体添加移动代码:本次使用的方式A、D键控制前后运动,W、S键控制转向 transform.Translate(0, 0, speed * Input.GetAxis("Vertical"));//Translate可以控制物体移动 transform.Rotate(0, speed *20* Input.GetAxis("Horizontal"),0);//Rotate可以控制物体转向3,物体需要原创 2020-09-05 21:29:53 · 4412 阅读 · 2 评论 -
unity相机切换
可以使用相机的enable方法实现相机的切换,Unity中enable是控制一个物体是否在屏幕上渲染或显示,而物体实际还是存在,只是相当于隐身,而物体本身的碰撞体还依然存在。 利用这个方法可以实现相机的切换效果,具体使用方法为: 1,在场景中创建两个相机2,创建一个脚本,然后添加下面的代码using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;.原创 2020-09-05 20:57:00 · 10297 阅读 · 6 评论 -
unity中禁用或启用游戏对象
1,使用enable来完成public Camera camera_demo;void Update(){ camera_demo.enabled=true; //启用游戏对象 camera_demo.enabled=false; //禁用游戏对象}2,可以使用SetActive来完成public GameObject demo;void Update(){ demo.SetActive(true); //启用游戏对象 demo.SetActive(false);原创 2020-09-02 09:33:26 · 4038 阅读 · 1 评论